> 文档中心 > SpringMvc框架详解

SpringMvc框架详解

目录

1.概念

2.作用

3.原理

4.使用Springmvc框架

4.1创建一个maven-web工程,并替换web.xml文件的内容

4.2引入springmvn所依赖的jar包

4.3将DpatcherServlet注册到配置文件中

4.4创建springmvc配置文件

4.5根据扫描包的地址,创建相应的包并在包中创建controller类

4.6启动服务器并访问映射路径,得到相应的页面和结果

5.springmvc的运行流程

6.传递和接受参数的方法

6.1传递和接收少量的参数

 6.1.2传递和接收大量参数(例如表单提交的一些数据

7.处理静态资源(例如 css,img,html等等)

8.将controller层的数据在页面回显的方式

8.1使用request保存数据并在页面使用el表达式获取

8.2使用Model保存数据在页面使用el表达式获取(作用域与request相同)

8.3使用session保存数据在页面使用el表达式获取

8.4使用@SessionAttributes注解将Model的作用域变为session

 9.使用重定向跳转

10.springmvc返回json数据

10.1导入所依赖的jar包

10.2加入ResponseBody注解

 11.springmvc全局异常处理类

 11.1作用

 11.2使用

12.springmvc拦截器

 12.1使用


1.概念

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

2.作用

springMVC它是spring框架的一个分支,该springMVC框架主要完成的功能是:==接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示== 可以把它理解为和Servlet干的工作是一样的。

3.原理

4.使用Springmvc框架

4.1创建一个maven-web工程,并替换web.xml文件的内容

原因:原来的配置文件版本过低,建议使用4.0版本

4.2引入springmvn所依赖的jar包

            org.springframework      spring-webmvc      5.2.15.RELEASE      

4.3将DpatcherServlet注册到配置文件中

     DispactherServlet org.springframework.web.servlet.DispatcherServlet       contextConfigLocation          classpath:springmvc.xml          DispactherServlet /    </web-app

4.4创建springmvc配置文件

 将包扫描的配置写在其中

        

4.5根据扫描包的地址,创建相应的包并在包中创建controller类

@Controller //该注解标记该类为处理层类---类似@WebServletpublic class HelloController {    @RequestMapping(value = "/hello01") //把请求路径映射到该方法上。    public String hello01(){ System.out.println("业务处理"); return "hello01.jsp"; //响应一个页面    }}

4.6启动服务器并访问映射路径,得到相应的页面和结果

http://localhost:8080/sprinmvc02_war/hello

5.springmvc的运行流程

 *     1. 客户端发生请求http://localhost:8080/sprinmvc02_war/hello
 *     2. 来到tomcat服务器。
 *     3. springmvc的前端控制器DipatcherServlet接受所有的请求。
 *     4. 查看你的请求地址和哪个@RequestMaping匹配。
 *     5. 执行对应的方法。方法会返回一个字符串。springmvc把该字符串解析为要转发的网页。
 *     6. 把该字符串经过视图解析器拼接。
 *     7. 拿到拼接的地址,找到对应的网页。
 *     8. 渲染该网页给客户

6.传递和接受参数的方法

6.1传递和接收少量的参数

 6.1.2传递和接收大量参数(例如表单提交的一些数据)

 特殊参数:日期类,springmvc框架不会帮我们直接解析

 处理方式:

1).为日期类加入日期处理类的注解

 2).在springmvc配置中启动注解驱动

 问题:接受参数时将其打印如果传递的是中文会出现中文乱码问题

 解决方法:添加编码过滤器(可以自定义,也可以使用该框架自带的),这里使用自带的过滤器

 1).直接将过滤器注册到web.xml配置文件中即可。

7.处理静态资源(例如 css,img,html等等)

问题:当我们在页面上引入图片时,其实也是一种请求,会被DispatcherSerlvet拦截,并且无法找到对应的@RequestMaping配置路径,所以无法放行。

解决:在springmvc配置文件中设置放行即可

8.将controller层的数据在页面回显的方式

8.1使用request保存数据并在页面使用el表达式获取

 @RequestMapping(value = "list01")    public String list01(HttpServletRequest request){ Student student = new Student("张三",0,new Date()); request.setAttribute("stu",student); return "msg.jsp";    }

8.2使用Model保存数据在页面使用el表达式获取(作用域与request相同)

  @RequestMapping(value = "list02")    public String list02(Model model){ Student student = new Student("李四",0,new Date()); model.addAttribute("stu",student); return "msg.jsp";    }

8.3使用session保存数据在页面使用el表达式获取

  @RequestMapping(value = "list03")    public String list03(HttpSession session){ Student student = new Student("李四",0,new Date()); session.setAttribute("stu",student); return "msg.jsp";    }

8.4使用@SessionAttributes注解将Model的作用域变为session

 9.使用重定向跳转

 @RequestMapping("list5")    public String list5(){ System.out.println("!!!!!!!!!!!!!!!!!"); return "redirect:list.jsp"; //当springmvc看到你返回的字符串钟含有redirect:时 它认为你要进行重定向跳转    }

10.springmvc返回json数据

10.1导入所依赖的jar包

       com.fasterxml.jackson.core      jackson-databind      2.13.2.2    

10.2加入ResponseBody注解

@Controller//将java对象转为json对象的注解@ResponseBodypublic class controller02 {    @RequestMapping(value = "list05")    public List list05(){ List list = new ArrayList(); list.add(new Student("张三",1,new Date())); list.add(new Student("李四",0,new Date())); list.add(new Student("王五",0,new Date())); return list;    } }

结果:

 发现:返回的日期对象为是1970年至填写的日期之间的毫秒数,将其转为yyyy-MM-dd格式

加入Jsonformat注解

 11.springmvc全局异常处理类

 11.1作用

     当controller发生异常,则有全局异常类来处理并执行相应的处理方法。

 11.2使用

1).创建一个异常处理类

//标记为异常处理类@ControllerAdvicepublic class MyExceptionHandler {    //标记异常类型    @ExceptionHandler(value = Exception.class)    public String exception(){ return "error.jsp";    }}

2).保证springmvc.xml中扫描包能够扫描到该类

 3).如果是ajax请求时出现异常,返回json数据(这里使用Map容器)

//标记为异常处理类@ControllerAdvice@ResponseBodypublic class MyExceptionHandler {    //标记异常类型    @ExceptionHandler(value = Exception.class)    public Map exception(){ Map map = new HashMap(); map.put("code",5000); map.put("msg","出错了"); map.put("data",null); return map;    }}

12.springmvc拦截器

拦截器只会拦截controller层的资源路径

 12.1使用

1).创建一个类,并实现HandlerInterceptor接口并重写接口的preHandle方法

public class MyInterceptor implements HandlerInterceptor {    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //该方法中可写放行的条件 //表示放行,返回false表示拦截 return true;    }}

2).将拦截器注册到springmvc.xml配置文件中