博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java小白学习指南【day36】---SpringMVC配置及使用流程
阅读量:141 次
发布时间:2019-02-26

本文共 6905 字,大约阅读时间需要 23 分钟。

1、认识springMVC

作用:springMVC是表现层框架,底层对Servlet的封装,替代web程序中servelt 控制器那一程

回顾servlet作用:接收参数,处理请求,响应,跳转页面

方式:转发/重定向

执行流程:

image-20201209110635293

2、springMVC入门

  • 创建web动态项目

  • 导入响应jar包

    ① Spring核心容器相关jar包

    com.springsource.org.apache.commons.logging-1.1.1.jar

    spring-beans-4.1.2.RELEASE.jar

    spring-context-4.1.2.RELEASE.jar

    spring-core-4.1.2.RELEASE.jar

    spring-expression-4.1.2.RELEASE.jar

    ② Spring测试相关jar包

    spring-test-4.1.2.RELEASE.jar

    spring-aop-4.1.2.RELEASE.jar – Spring测试需要导入此包

    ③ SpringMVC相关jar包:

    spring-web-4.1.2.RELEASE.jar – Spring对web项目的支持

    spring-webmvc-4.1.2.RELEASE.jar – SpringMVC核心包

  • 在web.xml配置前端控制器

DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
DispatcherServlet
/

设置SpringMVC配置文件创建resources

3、前端控制器编写方式

共有三种方式,用的最多的为方式三:

方式一(实现org.springframework.web.servlet.mvc.Controller;接口)

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class HelloMvc implements Controller{
//前端控制器编写的方式一,implements Controller @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
System.out.println("你好controller!"); return null; }}

方式二(实现 implements HttpRequestHandler )

import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.HttpRequestHandler;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class HelloMvc2 implements HttpRequestHandler {
// 前端控制器编写的方式二,implements HttpRequestHandler @Override public void handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
System.out.println("我是前端控制器编写的方式二"); }}

方式三(普通类+注解)

import org.springframework.stereotype.Component;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;//@Controller//spring会识别这个注解,进行扫描,并且创建该类的实例化对象@Component  //也可以使用@Component(普通类) 、 @Repository(dao层) 、@Service(service层)均可@RequestMapping("/user")public class HelloMvc3 {
// 前端控制器编写的方式三,普通类+注解 @RequestMapping("/eat") public void eat(){
System.out.println("前端控制器编写的方式三,普通类+注解"); } @RequestMapping("/put") public void put(){
System.out.println("Java是一门面向对象的语言"); }}

方式三还需要再spring-mvc.xml引入context命名空间及约束

4、全注解

  • 匹配请求:@RequestMapping(“/hehe”) 前提:spring-mvc.xml 开启注解支持

    可以写在类和方法上面

  • (1) 实例化对象:类所在包路劲,需要被是扫描

    <context:component-scan base-package=“cn.itsource”> 父包,所有子包都会被扫描

    <context:component-scan base-package=“cn.itsource._03Controller”> 精确扫描某个包:只会扫描本包

    只能放在类的上面

    ① @Controller

    ② @Service

    ③ @Repository 持久Dao

    ④ @Component 普通类

    注意: 相互使用

5、接收请求参数

共有四种方式:

  1. 通过传统的HttpServletRequest接收;

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

  3. 通过对象来接收;

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

@Controller@RequestMapping("/login")public class GetParamController {
//通过请求获取 @RequestMapping("/form1") public void parm1(HttpServletRequest req ){
String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); System.out.println(name+"---------"+pwd); } //通过参数获取 @RequestMapping("/form2") public void parm2(String name , String pwd){
//参数名名字必须与xml中的对应 System.out.println(name+"---------"+pwd); } //使用对象进行获取 @RequestMapping("/form3") public void parm3(User user){
//与类中字段名无关 System.out.println(user); } //restful风格:Url地址栏参数提取 @RequestMapping("/form4/{id}/{mm}") public void parm4(@PathVariable("id")String name , @PathVariable("mm")String pwd){
//与类中字段名无关 System.out.println(name+"---------"+pwd); }

6、过滤器

主要应对post请求乱码问题:可以自定义过滤器,SpringMVC写好的过滤器

web.xml中进行配置

filter
cn.xxxx.myfilter.MyFilter
enc
UTF-8
filter
过滤器路径匹配,所有文件都需要从过滤器过
/*
import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;//过滤器是去实现接口,因为是自己的去指定过滤规范public class MyFilter implements Filter{
String enc; //验证过滤器启动 public MyFilter(){
System.out.println("这是过滤器"); } @Override public void destroy() {
} @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2) throws IOException, ServletException {
System.out.println("开始过滤........"); req.setCharacterEncoding(enc);//对请求设定编码 arg2.doFilter(req, resp);//放行! } //初始化方法,就会获取参数,并且封装进对象中 @Override public void init(FilterConfig arg0) throws ServletException {
enc = arg0.getInitParameter("enc"); //System.out.println(enc); }}
characterEncoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncoding
/*

7、响应跳转向页面传值

共有三种方式:传递数据就是Controller往前台(页面)传递数据;

  1. 通过传统的HttpServletRequest传递;

  2. 通过ModelAndView对象传递;

  3. 通过Model对象传递;

@Controller@RequestMapping("/login")public class GetParamController {
// 通过传统的HttpServletRequest传递 @RequestMapping("/form5") public void parm5(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("message5", "你说什么鬼!");//存入请求对象,向前台共享数据 //转发的时候不会走视图解析器 req.getRequestDispatcher("/jsp/model2.jsp").forward(req, resp); } // 通过传统的Model传递 @RequestMapping("/form6") public String parm6(Model model) {
//就当作是request对象 model.addAttribute("message6", "太累了!!"); //这里还可以传一个集合,数组,或者对象 User user = new User("你是谁","6666"); model.addAttribute("user", user); //return "/jsp/model2.jsp";//返回的是一个路径 //使用视图解析器 //return "jsp/model2";//返回的是一个路径 //转发是不会走视图解析器,开始的/区别于绝对路径与相对路径 //return "forward:/jsp/model2.jsp";//转发的绝对路径 //return "forward:jsp/model2.jsp";//转发的相对路径 /login/jsp/model2.jsp,相对于当前设定的地址 //重定向不能够取值,所以前端看不到值 return "redirect:/jsp/model2.jsp"; } // 通用ModelAndView对象传递 @RequestMapping("/form7") public ModelAndView parm7() {
ModelAndView mv = new ModelAndView(); mv.addObject("message7", "奈史密斯"); mv.setViewName("/jsp/model2.jsp"); return mv; }

8、Spring-MVC.xml中配置视图解析器

SpringMVC默认是转发

  • 显示forword: 转发:不会经过视图解析器 一般不用

    • forword:/jsp/model2.jsp 加了斜杠绝对路劲
    • forword:jsp/model2.jsp 相对路劲,相对于当前的路劲 /login/jsp/model2.jsp
  • 显示redirect: 重定向: 不会经过视图解析器

请求转发(forward) 重定向(redirect)
访问WEB-INF *√* *X*
request传参 *√* *X*
全新请求(URL变化) *X* *√*
访问外网 *X* *√*

转载地址:http://jfeu.baihongyu.com/

你可能感兴趣的文章