自学springmvc的回顾(1/1)

springmvc概述

springmvc是一个在sprig框架基础上专门为web所开发的框架。
springmvc的核心是DispatcherServlet(中央调度器),DispatcherServlet能够创建一个全局作用域对象,控制Controller对象,并且接受用户请求,并处理结果。

spirngmvc基本流程

1、新建web maven工程
2、加入依赖
spring-webmvc依赖、jsp、servlet、jackson依赖

	<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

3、重点:在web.xml中注册springmvc框架的核心对象DispatcherServlet
(1)DispatcherServlet是叫做中央调度器,是一个servlet,它的父类是继承HttpServlet
(2)DispatcherServlet页叫做前端控制器
(3)DispatcherServlet负责接受用户提交的请求,调度其它的控制器对象,并把请求的处理结果显示给用户

<?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">
    <servlet>
        <servlet-name>springMvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcherServlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!--tomcat启动后,创建Servlet对象-->
    </servlet>
    <servlet-mapping>
        <servlet-name>springMvc</servlet-name>
        <!--在框架中,使用url-pattern有两种值的表示
        1、扩展名的方式*.do
        2、使用/的方式
        -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!--过滤器,过滤接受请求和响应的字符集编码-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

4、创建一个发起请求的页面 index.jsp

<form action="some.do" method="get">
        name:<input type="text" name="name" id="name"/><br>
        age:<input type="text" name="age" id="age"/><br>
        <input type="submit" value="查看"/>
    </form>

5、创建控制器类
(1)在类的上面加入@Controller注解,创建对象,并放入Springmvc容器中
(2)在类中的方法上面加入@RequestMapping注解

@Controller
public class MyController {
    @RequestMapping(value ="/some.do",method = RequestMethod.GET)
    public ModelAndView doSome(@RequestParam(value = "name",required = false) String name1, String age){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("com",name1);
        modelAndView.addObject("my",age);
        modelAndView.setViewName("result");
        return modelAndView;
    }

6、创建一个作为结果的jsp页面,显示请求的处理结果。

name:${com}<br/>
age:${my}

7、创建springmvc的配置文件(spring的配置文件一样)
(1)声明组件扫描器,指定@Controller注解所在的包名
(2)声明视图解析器,帮助处理视图的

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <context:component-scan base-package="com.my.controller"/>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/"></property>
            <property name="suffix" value=".jsp"/>
        </bean>
        <mvc:annotation-driven/>
        <mvc:default-servlet-handler/>
</beans>

springmvc处理请求

1、处理请求的两个注解:@Controller、@RequstMapping
@Controller:控制器类对象,控制和处理请求
@RequestMapping:绑定请求到本类的方法上,处理请求(使用value属性绑定请求到方法上,method设置请求方式)

2、控制器对象方法参数都可以有哪些?
(1)HttpServletRequest、HttpServletResponse、HttpSession
(2)和请求参数名相同的参数(也可以使用@RequestParam来指定参数对应的请求参数名)
(3)java对象,要求属性名和参数名必须一致
(4)List、Map集合,数组

3、控制器对象方法返回值都可以有哪些?
(1)ModelAndView:表示视图和数据(对视图进行forward操作)
(2)String:表示视图,返回的字符串可以为视图路径(对视图进行forward操作)
注:使用String做返回值,要在ResquestMapping中写入produces=“text/plains;charset=utf-8”,来做字符编码的处理
(3)void:不能表示视图和数据,响应ajax
(4)对象Object:表示数据,响应ajax

4、springmvc框架响应ajax的步骤:
(1)加入jackson依赖
(2)加入注解驱动(<mvc:annotation-driven/>)到springmvc的配置文件中
(3)在Controller处理器方法上加@ResponseBody注解

5、在spirngmvc框架中,几乎不能处理静态资源,可以处理动态资源,如果DispatcherServlet的地址是"/"的话,可能会导致静态资源访问不到的情况。

6、解决静态资源访问失败的方法:
(1) 在springmvc配置文件加入<mvc:annotation-driven/>和<mvc:default-servlet-handler/>,是通过处理器对象DefaultRequestHandler处理静态资源
(2)使用<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>,指定静态资源的位置,让框架处理

重定向和转发

1、重定向redirect:重新指定响应页面并携带请求数据,所以el表达式应该是

modelAndView.setViewName("redirect:绝对路径");
${param.参数名}

2、转发forward:由于视图解析器的存在,导致控制器对象只能从指定的参考路径出发,而其他路径的资源就访问不到,这时就可以使用forward

modelAndView.setViewName("forward:绝对路径");

springm框架的异常处理(流程)

1、新建一个自定义异常类MyUserException,再定义它的子类StudentException

public class MyException extends Exception {
    public MyException() {
        super();
    }
    public MyException(String message) {
        super(message);
    }
}
public class StudentException extends MyException{
    public StudentException() {
        super();
    }
    public StudentException(String message) {
        super(message);
    }
}

2、在controller类抛出StudentException异常

    public ModelAndView addStudent(Student student) throws MyException {
        String i1="注册成功";
        int i = studentService.insertStudent(student);
        if(student.getAge()>20){
            throw new StudentException("注册信息不正确");
        }
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("i1",i1);
        modelAndView.setViewName("result");
        return modelAndView;
    }

3、创建一个普通类,作用全局异常处理类
(1)在类的上面加入@ControllerAdvice
(2)在类中定义方法,方法上面加入@ExceptionHandler

@ControllerAdvice
public class GlobalException {
    @ExceptionHandler(value = StudentException.class)
    public ModelAndView error(Exception exp){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("exp",exp);
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

4、创建处理异常的视图页面

<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>注册信息有误
        ${exp}
    </h2>
</body>
</html>

5、创建springmvc的配置文件
(1)组件扫描器,扫描@Controller注解
(2)组件扫描器,扫描@ControllerAdvice所在的包名
(3)声明注解驱动

    <context:component-scan base-package="com.controller"/>
    <context:component-scan base-package="com.handler"/>
    <mvc:annotation-driven/>

springm框架的拦截器(流程)

1、创建一个普通类,作为拦截器使用
(1)实现HandlerInterceptor接口
(2)实现接口中的三个方法

public class MyInterceptor implements HandlerInterceptor {
    @Override/*在控制器方法前执行*/
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler/*被拦截的控制器对象*/) throws Exception {
        return false;//代表已拦截
    }
    @Override/*在控制器方法执行结束后执行,一般是对modelandview的数据做处理*/
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override/*在forward结束后执行,一般是做资源回收工作的*/
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

2、创建springmvc的配置文件
(1)组件扫描器
(2)声明拦截器,并指定拦截的请求uri地址

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.handler.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

spingmvc中DispatcherServlet的具体处理

1、浏览器发送请求给DispatcherServlet
2、DispatcherServlet将请求发送给处理器映射器
3、处理器映射器将请求处理加入到处理器执行链中返回给DispatcherServlet
4、DispatcherServlet将处理器执行链交给处理器适配器
5、处理器适配器将处理器执行链交给Controller去执行
6、Controller按照执行流程去执行,将ModelAndView返回给DispatcherServlet
7、DispatcherServlet把ModelAndView交给视图解析器去解析成view
8、最后调用view响应给浏览器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值