SSM框架开发web项目体系(六) SpringMVC入门

  前言

  我们早期的javaSE部分学习后,基本算是入门了,也知根知底了Java的语法和部分常用API,然后再浓密到数据库操作、WEB程序开发,逐渐会触发到JDBC、Servlet/Jsp之类的学识,期间可能会触发一多少个关系型数据库,例如MySQL/Oracle等等。像前边的MyBatis部分,重如果指向JDBC的更为封装,使得更适用于实际项目支出过程,不过JDBC、MyBatis或者Hibernate都是本着持久层数据库操作,例如查询、更新记录等等,我们付出顺序最终的变现对象是用户,而用户操作程序往往用的是什么?各个各类的浏览器,而不是透过大家后台的这一个测试代码,用户看不懂代码,也不需要懂。用户只需要点击、需要输入,比如点击一个链接,跳转到一个新页面,页面中的部分数据都是从数据库中查询拿到的;又或者是输入一段文本,点击提交按钮,更新的是数据库中的记录。大家要理清的是,那一个页面的操作指令是何许传递到后台服务器,然后访问到数据库的;还有数据库的数码是怎么从后台又流传前端,怎么着彰显到页面上的?

  尽管有学习过Servlet/Jsp相关内容,应该会对地方的题材不怎么有些精通。首先想起下什么是Servlet,Servlet是运作在我们服务器上的Java程序,功用于中间层,即客户端请求和服务器之间,大家发送请求,控制数据库、业务逻辑、做出响应,重返前端页面数据等等都足以经过其促成。Servlet的生命周期:1.开首化调用init()方法,2.拍卖客户端请求调用service()方法,3.了结程序调用destroy方法,4.最终垃圾回收。JSP本质上也是Servlet,项目启动,Web容器将JSP的代码编译成JVM可以辨识的java类即Servlet。Jsp重点偏向于页面的展现,应用html、CSS、JavaScript等前端技术在这里都不成问题,而Servlet更倾向于后台的作业逻辑、控制转发等等。

  SpringMVC是在Servlet基础上尤为封装开发的一套WEB层框架,所以假使能深切理清Servlet的有关内容,那么很容易就足以上手SpringMVC,下面我们先简单回顾一下事先Servlet的落实过程。

  Servlet篇

  新建一个一般web工程或者maven
web工程,通过连续HttpServlet,创立大家自定义的Servlet,如下所示

package com.mmm.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServletA extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //请求转发,相当于一次请求
        req.getRequestDispatcher("/a.jsp").forward(req, resp);
        //响应重定向,相当于二次请求,前一次请求设置的属性值在页面中将无法获取到
        //resp.sendRedirect("./a.jsp");
        //这里往往还要通过持久层对象访问数据库,获取或者更新数据
        //获取到的数据通过设置属性,然后在前端Jsp页面可以通过el表达式之类的方法拿到然后渲染样式展示出来
    }


}

  那里的/a.jsp,代表Jsp页面路径,为web文件根目录下例如webapp下,所以我们在webapp下简单成立a.jsp如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>a.jsp</title>
</head>
<body>
    这是a.jsp
</body>
</html>

  然后在web文件夹下WEB-INF文件夹下web.xml中<web-app></web-app>节点内添加如下内容

  <servlet>
      <servlet-name>MyServletA</servlet-name>
      <servlet-class>com.mmm.servlet.MyServletA</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>MyServletA</servlet-name>
      <url-pattern>/a.do</url-pattern>
  </servlet-mapping>

  那里的<servlet-name>的值在<servlet>和<servlet-mapping>中要保持一致,<servlet-class>即为我们前面自定义的Servlet全名(含包名),<url-pattern>用于匹配大家在地方栏输入的url地址。例如这里透过localhost:8080/servlet-web/a.do就足以匹配到该Servlet,从而运行到该Servlet中的相关办法,那里会呈请转发到a.jsp,如下图所示。

图片 1

  上边为一个最大旨的此前端http请求到后台服务器,运行Servlet后,再次来到前端视图的经过。不过其实情形下,前端的呼吁不会是这么概括拿回一个静态无数据的页面,也不会唯有一个,举个例证,假使地点a.do对应一个扩展一条商品数量的操作,即在我们自定义的MyServlet中doPost()方法里实施添加操作,那么一旦还有删改查操作,依据这边的不二法门,我们需要再定义MyServletB、MyServletC、MyServletD,然后web.xml添加3段相应的Servlet节点定义,再持续开展,我们不断对货物举办增删改查,还有员工、销售记录等等举行操作,这样下来,大家得定义和部署多少个Servlet,有的人想到办法,例如商品的操作路径匹配都是a.do,然后加个参数判断,及路径后增长?action=add或者?action=del等等,这样平等类对象的操作大家将其统一匹配到同一个Servlet,在Servlet的点子内部再去依据具体的action操作类型去判断究竟要举行哪个种类操作(运行哪段工作逻辑)。

  SpirngMVC更是将那种考虑升华到了极致,我们在web,xml只定义有且唯有一个Servlet,这些Servlet能匹配到独具的例行请求,然后可以遵照路径精确分析到实际的进行某个类的某部方法,这里的类即控制层Controller,例如一个货品的连锁操作,我们定义一个货品Controller类,类中定义各样操作方法,需要拜访数据库的话,往往是透过Service层对象去调用持久层的代码实现数据库操作。上面就实例一段单独通过SpringMVC来落实中间控制层效果的小案例。

  SpringMVC篇  

  为了方便管理jar包,这里我们得以新建一个maven
web项目,pom倚重可参照前边的环境搭建篇,这里同Servlet相比,我们仅需要一个Java类也就是下边提到的controller,然后是一个指定路线下的jsp文件,最终稍微修改一下web.xml,这三步即可简单过一次SpringMVC的主导运作过程。下边分别详细写出这三步的始末。

  DemoController.java

package com.mmm.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("demo")
public class DemoController {

    @RequestMapping(value="/toPage")
    public String toPage() {
        return "page";
    }
}

  从上往下,首先@Controller注明属于Spring序列组件bean阐明之一,对应web表现层的零件,类似的还有代表工作逻辑层的@Service(Service),代表数据库访问层的@Repositoty,通用组件@Component等等,实际项目中,层与层之间类对象还会相互调用,基于Spring容器的IOC及看重注入,我们又还会触发到@Autowired,@Autowired等等评释。在此处我们可以简单明了为经过@Controller讲明,Spring会识别并实例化那几个bean,这些类对象的始建和保管将交由Spring容器去控制。

  然后@RequestMapping(“demo”),看英文单词意思应该不难了然,Request请求,Mapping映射,请求映射,通过我们客户端例如浏览器这边过来的http请求,前边我们用过的Servlet会通过配备url匹配到访问路径从而匹配到对应的Servlet中,而在此处仿佛,SpringMVC会按照我们的访问路径匹配到相应的Contoller中的相应措施,是的,这里还会愈来愈准确匹配到方法。上面@RequestMapping(value=”/toPage”)即方法名的映照,例如这里把类和艺术的映射名组合起来即为demo/toPage,在本例中,我们因此localhost:8080/spring-mvc/demo/toPage,即可匹配到那么些DemoController的toPage方法中实施。

  可以看出方法的重临值是String字符串类型,这里可以领略为用于获取视图页面路径。下面结合Spring
MVC配置文件讲解。

  application-mvc.xml

 

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  

     <!-- 自动扫描开启 -->
      <context:component-scan base-package="com.mmm.web" />
     <mvc:annotation-driven/>

     <!-- Spring MVC视图解析配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/views/" />  
        <property name="suffix" value=".jsp" />
    </bean>  


</beans>

 

  这里的<context:component-scan base-package=”com.mmm.web” />即用于Spring扫描识别bean申明,例如刚刚讲到的@Controller,而<mvc:annotation-driven/>则用于扫描SpringMVC相关特定注解,例如这里@RequestMapping等等。

  下边的视图解析配置即整合刚刚下边讲到的视图页面路径,prefix和suffix分别为前缀和后缀的情趣,结合前面的controller中方法,即页面请求转发路径的集合前后缀,前边controller中艺术的重临值为”page”,那么结合前后缀,即为/WEB-INF/views/page.jsp,而这么些途径对应啥地方,如下图所示。

图片 2

  所以大家要在这边创办一个jsp文件,views文件夹也是。

  最终在web.xml中出席如下内容

 <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/application-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

  大家会意识这里也是部署的Servlet,即org.springframework.web.servlet.DispatcherServlet,只不过只安排了这单独一个,映射路径匹配通用请求,同时init-param设置开端参数即我们SpringMVC配置文件路径。这样一来,大家请求都会被SpringMVC体系组件接受、解析路径、分配到对应的Controller的相应措施。

  下边步骤截至后,我们发表项目并启动Tomcat服务器,在浏览器地址栏输入http://localhost/spring-mvc/demo/toPage,看到如下页面,即为成功![](data:image/png;base64,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AAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUsQMBZxA+XriGAAAIIIIAAAggggAACuRQg4MylPnUjgAACCCCAAAIIIIAAAkUs8P8Bc1b6YAAAAARJREFUMuxWUw56BHUAAAAASUVORK5CYIIA)

  小结

  通过下面基础的实例,我们能一步步知情从Servlet到web框架SpringMVC的行使,实际支出中千篇一律坚守这么些主旨规则,只不过事更多的工作逻辑、视图文件等等,比如这里讲到页面跳转中的请求转发,那么是否类似Servlet还有响应重定向,还有,Controller中方法大家不必然是跳转到页面,也得以从来传送JSON数据重回前端,以及咱们面前学习到的MyBatis封装持久层,那么大家在此间怎么与持久层连接起来去拜访数据库查询或者更新数据,还有到底怎么样是事情逻辑,等等这一个都是我们需要考虑的题材,前边准备分头以切实实例举办表明,欢迎一起探索。

网站地图xml地图