一.项目步骤、原理
1.导包
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