• springmvc快速复习一


      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.5.RELEASE</version>
      </dependency>
    

    首先需要了解 ModelAndView Model ModelMap 三者区别
    ModelAndView 返回值类型是ModelAndView
    可以用来存储数据 :modelAndView.addObject("msg","hello");
    设置返回视图:modelAndView.setViewName("/pages/message.jsp");也就是要转发的页面
    Model返回值类型是String
    可以用来存储数据:model.addAttribute("msg","hello");
    配合返回值String类型 来进行转发
    ModelMap String
    可以用来存储数据:modelMap.addAttribute("msg","hello");
    配合返回值String类型 来进行转发

    spring配置:
    一.入门案例及介绍

    1.<!--配置组件扫描,让Spring容器去加载组件-->
    <context:component-scan base-package="com.itheima"/>
    
    2.配置web.xml
    	<servlet>
    		<servlet-name>DispacherServlet</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		
    		<!--配置初始化的配置文件springmvc.xml路径地址-->
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>classpath:spring-*.xml</param-value>
    		</init-param>
    		
    		<!--表示容器在应用启动时就加载并初始化这个servlet,如果是负数或没有,随意时机加载servlet-->
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    <!--设置Servlet拦截的请求路径-->
    <servlet-mapping>
        <servlet-name>DispacherServlet</servlet-name>
        <!--
        当前servlet拦截的请求路径
        含义:拦截所有以.do结尾的请求url地址
        -->
        <url-pattern>*.do</url-pattern> 后续会使用Restful风格拦路径需要修改为“/”
    </servlet-mapping>
    
    3.创建处理器(也就以前的controller层)
    	举例:
    	
    	@Controller//使用@Controller注解的类称为处理器
    	public class HelloController {
    		/**
    		* 处理器里面可以原有多个使用@RequestMapping注解的方法
    		* 每个方法映射为一个HTTP接口
    		*
    		* modelAndView是spring提供的数据视图对象
    		* 用于为指定视图(jsp页面)以及提供数据
    		*/
    		@RequestMapping("/sayHello")          //可以通过/sayHello.do来访问
    		public ModelAndView sayHello(ModelAndView modelAndView){
    		// 设置模型数据
    		modelAndView.addObject("nowDate",new Date());
    		modelAndView.addObject("msg","hello");
    		// 设置视图(真实路径)
    		modelAndView.setViewName("/pages/message.jsp");
    		return modelAndView;
    		}
    	}
    

    二.请求流程
    1.浏览发起请求到前端控制器DispatcherServlet

    mvc:annotation-driven/
    2.前端控制器请求HandlerMapping查找Handler
    3.处理器映射器(HandlerMapping)向前端控制器返回HandlerExecutionChain(处理器链)
    4.前端控制器调用处理器适配器HandlerAdaper执行Handler
    5.处理器适配器会根据适配结果去执行Handler
    6.Handler执行完成后会返回给处理器适配器ModelAndView
    7.Handler执行完成后,处理器适配器会返回ModelAndView(中包裹Model和View)给前端控制器
    8.前端吧控制器会请求视图解析器去进行视图解析 可以在spring-mvc.xml中配置视图解析器






    9.视图解析器向前端控制器返回View
    10前端控制器进行视图渲染 将数据填充到request中
    11.前端控制器向用户响应结果
    三.注解讲解
    @RequestMapping:
    请求映射
    设置请求路径
    在一个方法上配置多个路径@RequestMapping(value = {"sayHello1","sayHello2"})
    有个method属性可以指定请求方式:Get请求,Post请求,Delete请求,Put请求
    举例: method = RequestMethod.GET
    可以标记在类上 :窄化请求映射
    可以标记在方法上:下面例访问路径为 localhost:8080//hello/sayHellp
    @Controller
    @RequestMapping("/hello")
    public class HelloController {
    @RequestMapping("/sayHello")
    public ModelAndView sayHello(){
    // ……
    }
    }
    四.请求参数获取 注意都在参数上获取
    简单类型:
    直接参数名与name相同就可以获取参数
    参数名与name不相同可以通过注解来指定 举例:@RequestParam("user_id") Integer id就能获取前端的user_id并赋值给id
    逐个接收:定多个方法变量,接收多个参数
    参数格式:id=1&username=zhangsan
    Pojo类型:(实体类):
    可以直接写实体类名获取: User user
    复杂类型: pojo内有pojo属性 可以通过改变前端name来获取







    数组类型: String[] args 前端都叫args
    list集合
    @RequestParam("args") List args
    五.类型转换
    举例日期类型转换
    会自动识别2002/10/12 不会识别2020-12-12
    有两种方式解决
    1.注解方式比较简单
    @DateTimeFomat标记在属性上方 可以写在 pojo属性上方 也能写在参数Date类型
    自定义类型转换器 (后修改xml)
    实现Converter<String,Date>接口 重写convert方法
    举例:
    public class DateStringConverter implements Converter<String,Date> {
    //重写接口的抽象方法,参数由泛型决定
    public Date convert(String source) {
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date date = null;
    //类型转换器无法预计使用过程中出现的异常,因此必须在类型转换器内部捕获,不允许抛出,框架无法预计此类异常如何处理
    try {
    date = df.parse(source);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    return date;
    }
    }

    			<!--3. mvc的注解驱动-->
    			<!--类型转换器工厂对象需要使用 mvc注解驱动加载-->
    			<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    			
    			
    			<!--创建类型转换器的工厂对象-->
    			<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    				<property name="converters">
    					<set>
    						<bean class="com.itheima.StringToDateConverter"></bean>
    					</set>
    				</property>
    			</bean>
    

    编码过滤器这里不进行代码演示 CharacterEncodingFilter类
    通过在web.xml中配置Filter 初始化参数加上编码

  • 相关阅读:
    js生成cron表达式
    原生table控制tbody滚动而thead不滚动
    js记性
    oracle 多库表建立dblink查询
    java操作mysql数据库备份
    java 抓取网页的图片
    ZOJ 3485 Identification Number【模拟】【暴力】
    Codeforces 1037E Trips【图论】【dfs】
    Codeforces 1036C Classy Numbers 【数位dp】
    Codeforces 1036B Diagonal Walking v.2 【贪心】
  • 原文地址:https://www.cnblogs.com/x-i-n/p/14161163.html
Copyright © 2020-2023  润新知