javaweb实训第五天下午——SpringMVC基础(3)

简介: 7.控制器常用操作控制器除了处理请求并返回视图以外,还需要一些事情,比如接收页面请求参数、绑定数据到页面、返回json数据、文件上传、文件下载等;

javaweb实训第五天下午——SpringMVC基础(2)https://developer.aliyun.com/article/1415104

7.控制器常用操作

控制器除了处理请求并返回视图以外,还需要一些事情,比如接收页面请求参数、绑定数据到页面、返回json数据、文件上传、文件下载等;

7.1.接收请求参数

7.1.1.处理中文参数乱码问题

  1. 参数接收,首先要考虑乱码问题,以前的处理方式是:
    (1)Get请求:tomcat6.x,7.x/conf/server.xml中配置(tomcat8.X不需要配置):
<Connector port="80" protocol="HTTP/1.1" URIEncoding="UTF-8"
               connectionTimeout="20000"
               redirectPort="8443" />

(2)Post请求:需要再获取请求参数之前设置编码格式:

req.setCharacterEncoding("utf-8");


  1. 对于Post请求而言,通过上述的方式就需要在每一个控制器都要去处理乱码,有没有更加简洁的办法,只写一次就可以作用在所以在其他控制器呢?
7.1.1.1.过滤器
7.1.1.1.1.过滤器介绍

生活中的过滤器: 净水器、空气净化器、渔网、烟嘴、塞子;

20210602152333124.png

  1. Filter过滤器是一个对访问的请求和响应进行拦截的web组件;
  2. Filter过滤器可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理;

20210602152337409.png

7.1.1.1.2.过滤器编写

写一个类去实现Filter接口,并实现接口中的所有方法;

在web.xml中配置或者使用注解配置【@WebFilter(“过滤器路径”)不推荐】

Java代码:

public class FirstFilter implements Filter {
   public FirstFilter() {
   }
  public void destroy() {
  }
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("utf-8");
       chain.doFilter(request,response);//放行
  }
  public void init(FilterConfig fConfig) throws ServletException {
  }
}

web.xml配置:

<filter>
    <filter-name>first</filter-name>
    <filter-class>cn.itsource.filter.FirstFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>first</filter-name>
    <url-pattern>/*</url-pattern> 
  </filter-mapping>
7.1.1.2.配置字符编码过滤器
  1. springmvc框架本身没有处理请求编码,但是spring框架为我们提供了一个编码过滤器。开发者只需要配置一个spring内置请求编码过滤器即可。在web.xml配置一个请求编码过滤器:
<!-- 支持UTF-8编码 -->
<filter>
    <filter-name>characterEncoding</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>
</filter>
<filter-mapping>
    <filter-name>characterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

7.1.2.参数接收方式

通过传统的HttpServletRequest接收;

通过控制器的执行方法的参数接收;

通过对象来接收;

通过url中的参数接收(restfull风格) @PathVariable(“id”)转换;7.1.2.1.通过传统的HttpServletRequest接收

7.1.2.1.通过传统的HttpServletRequest接收

SpringMVC想要使用HttpServletRequest、HttpSession、HttpServletResponse对象可以直接在方法参数中写即可,很强大,需要什么就写什么(只限于普通类加注解的实现方式);

//使用HttpServletRequest接收(不建议使用)
/**
 * http://localhost/params04?name=admin&age=24
 */
@RequestMapping("/params04")
public ModelAndView params04(HttpServletRequest request){
  System.out.println(request.getParameter("name"));
  System.out.println(request.getParameter("age"));
  return null;
}
7.1.2.2.通过参数接收

名称与传递参数一致:

//普通数据接收
/**
 * http://localhost/params01?name=admin&age=24
 */
@RequestMapping("/params01")
public ModelAndView params01(String name,Integer age){
  System.out.println("name:"+name);
  System.out.println("age:"+age);
  System.out.println("xx:"+xx);
  return null;
}

名称与传递参数不一致:使用@RequestParam(“xxx”)注解

/**
 * 如果传过来的名称与接收的名称不一致
 * http://localhost/params02?name=admin&age=24
 */
@RequestMapping("/params02")
public ModelAndView params02(@RequestParam("name") String username,Integer age){
  System.out.println("username:"+username);
  System.out.println("age:"+age);
  return null;
}

7.1.2.3.通过对象接收

/*
 * http://localhost/params03?name=admin&age=24&date=2017-05-14
 *  注意:接收日期必需在 set时间前配置:@DateTimeFormat(pattern="yyyy-MM-dd")
 */
@RequestMapping("/params03")
public ModelAndView params03(User user){
  System.out.println("name:"+user.getName());
  System.out.println("age:"+user.getAge());
  System.out.println("date:"+user.getDate());
  return null;
}

特别注意:在对象部分咱们加了一个日期,而日期格式的数据接收需要加相应的注解:

public class User {
  private Long id;
  private String name;
  private Integer age;
  private Date date;
//其它的getter,setter省略...
  @DateTimeFormat(pattern="yyyy-MM-dd")
  public void setDate(Date date) {
    this.date = date;
  }
}
7.1.2.4.URL地址提取数据
使用@PathVariable("id")
/**
 * 接收url中参数的请求,接收用户请求参数值 
 * http://localhost/params05/delete/100/tom
 *  注:这种方式为RESTful风格,参数不易过多
 */
@RequestMapping("/params05/delete/{id}/{username}")
public ModelAndView params05(@PathVariable("id")Long id,@PathVariable("username")String name){
  System.out.println(id);
     System.out.println(name);
  return null;
}

7.2.视图解析器

  1. SpringMvc提供了InternalResourceViewResolver,用于统一管理响应视图的匹配;
  1. 使用之后,响应的数据就会交给这个视图解析器进行解析,然后转向响应的页面,控制器中响应视图写法就比较简单了;
 <!-- 设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/jsps/" />
   <property name="suffix" value=".jsp" />
</bean>         

路径简写:

20210602152646991.png

javaweb实训第五天下午——SpringMVC基础(4)https://developer.aliyun.com/article/1415114?spm=a2c6h.13148508.setting.15.6e1a4f0eQzpjQW

目录
相关文章
|
7月前
|
XML JSON JavaScript
javaweb实训第六天上午——JSON&SpringMVC进阶(1)
1.课程介绍 JSON; (了解) SpringMVC返回JSON; (掌握) SpringMVC文件上传、下载; (掌握) SpringMVC拦截器; (掌握) SpringMVC执行流程; (掌握) 2.JSON 2.1.JSON概述
79 0
|
7月前
|
JSON 前端开发 Java
javaweb实训第五天下午——SpringMVC基础(4)
7.3.向页面传值 传递数据就是Controller往前台(页面)传递数据;
81 0
|
7月前
|
前端开发 Java 应用服务中间件
|
7月前
|
开发框架 前端开发 Java
javaweb实训第五天下午——SpringMVC基础(1)
1.课程介绍 SpringMVC概述; (了解) SpringMVC入门; (掌握) 前端控制器配置; (掌握) 业务控制器的三种实现; (掌握) 全注解; (掌握) 控制器常用操作(接收数据,向页面传值,重定向转发); (掌握)
64 0
|
7月前
|
JSON 前端开发 Java
javaweb实训第六天上午——JSON&SpringMVC进阶(2)
5.SpringMVC拦截器 5.1.创建拦截器
83 0
|
XML 前端开发 JavaScript
【知识】了解Web、JavaWeb、SpringMVC、SpringBoot
【知识】了解Web、JavaWeb、SpringMVC、SpringBoot
268 0
|
存储 前端开发 Java
JavaWeb - Spring容器 & SpringMVC容器 & Web容器的关系
JavaWeb - Spring容器 & SpringMVC容器 & Web容器的关系
263 0
JavaWeb - Spring容器 & SpringMVC容器 & Web容器的关系
|
7月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
6月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
108 1