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配置文件中