后端开发

一、SpringMVC快速入门

2019-01-29  本文已影响15人  I墨雨

第一个Demo

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <a href="${pageContext.request.contextPath}/first.action">第一个Demo</a>
  </body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 配置SpringMVC前端控制器 -->
    <servlet>
        <servlet-name>mySpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定SpringMVC配置文件 -->
        <!-- SpringMVC的配置文件的默认路径是/WEB-INF/${servlet-name}-servlet.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>mySpringMVC</servlet-name>
        <!-- 设置所有以action结尾的请求进入SpringMVC -->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>
<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--开启注解扫描-->
    <context:component-scan base-package="com.itlike"/>
</beans>
package com.itlike.springmvc;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller //让该类称为控制器类
public class MyController {
    @RequestMapping("/first.action")
    public ModelAndView show(){
        ModelAndView modelAndView = new ModelAndView();
        // 接收参数(或来自页面)
        modelAndView.addObject("name","itlike");
        //跳转
        modelAndView.setViewName("/result.jsp");
        return modelAndView;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>${name}来了!</h1>
</body>
</html>

执行流程

1.PNG

执行原理

1.png

需要手动编写的,只有 DispatcherServlet(web.xml)、Handler(Controller)、View(jsp)

组件说明

组件调度

  1. 前端控制器
  2. 用户请求到达前端控制器,它就相当于mvc模式中的C
  3. dispatcherServlet是整个流程控制的中心
  4. 由它调用其它组件处理用户的请求
  5. dispatcherServlet的存在降低了组件之间的耦合性

请求映射

  1. 处理器映射器
  2. HandlerMapping负责根据用户请求url找到Handler处理器
  3. springmvc提供了不同的映射器实现不同的映射方式
  4. HandlerMapping会把找到映射返回给前端控制器

执行处理器

  1. 通过HandlerAdapter对处理器进行执行
  2. 处理器适配器

请求处理

  1. 后端控制器
  2. 在DispatcherServlet的控制下Handler对具体的用户请求进行处理

生成View视图

  1. 视图解析器
  2. View Resolver负责将处理结果生成View视图

数据展示

  1. springmvc框架提供了很多的View视图类型的支持
  2. 包括但不限于:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp

默认加载组件

处理器映射器HandlerMapping

  1. @RequestMapping:定义请求url到处理器功能方法的映射
  2. 注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。
@RequestMapping("/first.action")
  1. 根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法
  2. 匹配成功返回HandlerMethod对象给前端控制器
  3. HandlerMethod对象封装url对应的方法Method

处理器适配器HandlerAdapter

  1. 对标记@ResquestMapping的方法进行适配
  2. 解析对应的方法

视图解析器ViewResolver

  1. 视图解析器使用SpringMVC框架默认的InternalResourceViewResolver
  2. 这个视图解析器支持JSP视图解析
  3. 配置视图解析器
1. 当一个页面存放目录结构比较多时,`就可以配置目录`
2. 可以在返回地址上添加`前缀`和`后缀`

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置前缀-->
    <property name="prefix" value="WEB-INF/myxq/"/>
    <!--配置后缀-->
    <property name="suffix" value=".jsp"/>
</bean>
@Controller //让该类成为控制器类
public class MyController {
    @RequestMapping("/first.action")
    public ModelAndView show(){
        ModelAndView modelAndView = new ModelAndView();
        // 接收参数(或来自页面)
        modelAndView.addObject("name","itlike");
        //跳转
        modelAndView.setViewName("itlike");
        return modelAndView;
    }
}
1.png
2.png

解决初始化加载慢

<!--大于1表示在服务器启动时就加载-->
<load-on-startup>1</load-on-startup>
<!-- 配置SpringMVC前端控制器 -->
<servlet>
    <servlet-name>mySpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 指定SpringMVC配置文件 -->
    <!-- SpringMVC的配置文件的默认路径是/WEB-INF/${servlet-name}-servlet.xml -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--大于1表示在服务器启动时就加载-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mySpringMVC</servlet-name>
    <!-- 设置所有以action结尾的请求进入SpringMVC -->
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

请求转发

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <a href="${pageContext.request.contextPath}/second.action">第二个Demo</a>
  </body>
</html>
@Controller //让该类成为控制器类
public class MyController {
    @RequestMapping("/second.action")
    public String show2(){
        /*使用String直接进行跳转(不需要数据)*/
        return "/result.jsp";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>来了!</h1>
</body>
</html>

重定向

return "redirect:/result.jsp";

return "redirect:/second.action";

请求转发和重定向的区别?

请求转发:地址栏不改变

2.PNG

重定向:地址栏改变

1.PNG

更改web.xml

<!-- 设置所有以action结尾的请求进入SpringMVC -->
<url-pattern>/</url-pattern>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 配置SpringMVC前端控制器 -->
    <servlet>
        <servlet-name>mySpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定SpringMVC配置文件 -->
        <!-- SpringMVC的配置文件的默认路径是/WEB-INF/${servlet-name}-servlet.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--大于1表示在服务器启动时就加载-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mySpringMVC</servlet-name>
        <!-- 拦截所有,不包括jsp,包含.js .png.css (建议使用) -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

简化后Controller

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%--设置"/",不再需要以.action结尾--%>
  <a href="${pageContext.request.contextPath}/first">demo</a>
  </body>
</html>
@Controller
public class MyController {
    @RequestMapping("/first")
    public String myform(){
        //System.out.println("跳转。。。");
        return "/second.jsp";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>second!</h1>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读