Spring mvc的总结

一.项目步骤、原理

1.导包

2.配置web.xml文件(配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该Servlet和配置servlet、struts目的一样)
3.在WEB-INF目录下创建 springmvc-servlet.xml(如果不在WEB-INF下(放在src包下)需要在web.xml中配置)
4.编写控制类(控制类 IndexController实现接口Controller ,提供方法handleRequest处理请求)

5.准备index.jsp和message.jsp文件(访问地址http://127.0.0.1:8080/springmvc/index。jsp跳转过程)

原理图

1. 用户访问 /index
2. 根据web.xml中的配置 所有的访问都会经过DispatcherServlet
3. 根据 根据配置文件springmvc-servlet.xml ,访问路径/index会进入IndexController类
4. 在IndexController中指定跳转到页面index.jsp,并传递message数据

5. 在index.jsp中显示message信息


二.总结归纳

1.视图定位带来的好处:将前端、后端、js、css等文件分类,一目了然(IndexController.java、springmvc-servlet.xml文件需要修改)

2.使用注解实现(

IndexController.java在类前面加上@Controller 表示该类是一个控制器

在方法handleRequest 前面加上 @RequestMapping("/index") 表示路径/index会映射到该方法上

注意不再让IndexController实现Controller接口

springmvc-servlet.xml文件需要开启注解)

3.接收表单数据(先写一个pojo类,在controller实现类中将表单数据注入到pojo对象中,然后mav.addObject("参数名“,pojo))

4.上传文件(文件上传到服务器(准备工作:1.在web.xml中配置允许访问.jpg文件;2.在springmvc-servlet.xml中配置开放对上传功能的支持。运行流程:在表单中提交——>在controller中接收,并存储在服务器某文件夹下,获得随机生成的文件名提交给视图——>在页面显示)

5.客户端跳转(主页显示为产品列表,当编辑产品之后自动重定向(redirect)到主页(是数据修改后的主页面))

6.session

7.过滤器:请求拦截(中文问题:在web.xml中配置;)

8.拦截器:方法拦截(1编写拦截类;2在springmvc-servlet.xml中配置(类似spring  aop))

多个过滤器和多个拦截器的情况

面试题:

1.客户端跳转和服务端跳转有什么区别?

 客户端的跳转:跳转之后地址栏的信息是会变的,变为跳转之后的地址信息

例如:response.sendRedirect();

服务器端的跳转:跳转之后的地址栏的信息不会发生任何的改变

例如:<jsp:forword>

?
1
request.getRequestDisPather( "" ).forword(request, response);

(1).而且在使用request属性范围时,只有服务器端跳转才能将request范围的属性保存到跳转页面;而如果是客户端的跳转,则无法进行request属性的传递

(2).另外,如果是服务器端的跳转,则执行跳转语句时立刻进行跳转;如果使用的是客户端跳转,则是整个页面执行完之后才执行跳转的。

(3).在Servlet中如果想要进行客户端的跳转,直接使用HttpServletResponse接口的SendRedirect()即可,但是需要注意的是,此跳转只能传递session以及application范围的属性,而无法传递request范围的属性

2.过滤器和拦截器的区别?

(1)过滤器:

依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等

关于过滤器的一些用法可以参考我写过的这些文章

  • 继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数:https://www.zifangsky.cn/677.html

  • 在SpringMVC中使用过滤器(Filter)过滤容易引发XSS的危险字符:https://www.zifangsky.cn/683.html

(2)拦截器:

依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

关于过滤器的一些用法可以参考我写过的这些文章:

  • 在SpringMVC中使用拦截器(interceptor)拦截CSRF攻击(修):https://www.zifangsky.cn/671.html

  • SpringMVC中使用Interceptor+cookie实现在一定天数之内自动登录:https://www.zifangsky.cn/700.html

多个过滤器与拦截器的代码执行顺序:https://blog.csdn.net/xiaoyaotan_111/article/details/53817918


猜你喜欢

转载自blog.csdn.net/yiguang_820/article/details/80884684