Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象
SpringMVC使用细节
第一节 视图解析器
通过HelloWorld程序我们看到了handler方法的返回值表示:
请求处理完成后,请SpringMVC执行一个请求转发。转发的地址就是handler方法的返回值。
假设我们在/WEB-INF/pages目录下有一组JSP页面,那么访问它们的路径都是以“/WEB-INF/pages/”开头,以“.jsp”结尾。基于这样一种情况,SpringMVC做了一种设计:它允许我们把转发路径中前面的固定部分和后面的固定部分以前缀、后缀的形式写到配置文件中,然后我们的handler方法就仅仅指定中间不一样的部分即可。中间部分和前缀、后缀做字符串拼接。这就是SpringMVC提供的视图解析器,我们在SpringMVC的配置文件中加入下面的配置,视图解析器就生效了。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/>
</bean>
有了视图解析器,handler方法的返回值就简单了:
@RequestMapping("/hello")
public String hello() {System.out.println("SpringMVC处理了这个请求!");return "result";
}
SpringMVC会使用上面方法的返回值“result”和前缀后缀做字符串拼接,从而得到转发路径。
“/WEB-INF/pages/”+“result”+".jsp"→"/WEB-INF/pages/result.jsp"
然后按照拼接得到的结果转发请求。
第二节 @RequestMapping注解使用在类级别
假设我们在同一个模块有下面几个方法:
@RequestMapping("/user/login")
public String login() {return "result";
}@RequestMapping("/user/register")
public String register() {return "result";
}@RequestMapping("/user/logout")
public String logout() {return "result";
}
它们在@RequestMapping注解中的映射地址都是以/user开头,能否统一提取出来呢?很简单,在类上再使用一个@RequestMapping注解把/user部分提取出来即可。
@Controller
@RequestMapping("/user")
public class UserHandler {@RequestMapping("/login")public String login() {return "result";}@RequestMapping("/register")public String register() {return "result";}@RequestMapping("/logout")public String logout() {return "result";}
}
访问的效果是一样的。
第三节 获取原生Servlet API对象
1.提出问题
在Servlet的doGet()方法中,我们可以拿到原生、本真的HttpServletRequest和HttpServletResponse这样的对象,那么在SpringMVC的handler方法中能够拿到吗?
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {……
}
完全可以,直接从handler方法的参数位置传入即可。
2.直接传入handler方法
@RequestMapping("/testOriginalObject")
public String testOriginalObject( HttpServletRequest request, HttpServletResponse response, HttpSession session) {System.out.println(request);System.out.println(response);System.out.println(session);return "result";
}
结果:
org.apache.catalina.connector.RequestFacade@d57f488
org.apache.catalina.connector.ResponseFacade@3b9b53b
org.apache.catalina.session.StandardSessionFacade@27f11e41
3.ServletContext对象
方法一:通过HttpSession对象获取
session.getServletContext()
方法二:使用@Autowired注解装配
@Autowired
private ServletContext servletContext;
Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象相关推荐
- Spring MVC配置多个视图解析器(FreeMarker,JSP)
Spring MVC配置多个视图解析器(FreeMarker,JSP) Spring MVC开发过程中,有时候需要多个视图解析器策略来解析视图名称,出现这个情况怎么解决? 通过"order& ...
- 详解Spring MVC 4之ViewResolver视图解析器
所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...
- 【SpringMVC框架】小结+视图解析器配置前缀和后缀
1.入门程序小结 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法. 前端控制器配置: 第一种:*.action,访问以.action结尾 由Dispatche ...
- spring MVC使用自定义的参数解析器解析参数
目录 写在前面 编写自定义的参数解析器解析请求参数 项目结构 定义注解 实体类 controller 定义参数解析器 注册参数解析器 启动项目 发起请求查看结果 写在前面 如果还有小伙伴不知道spri ...
- Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解
基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...
- SpringMVC的视图和视图解析器
Java知识点总结:想看的可以从这里进入 目录 2.4.视图.视图解析器 2.4.1.视图 2.4.2.视图解析器 2.4.视图.视图解析器 视图是渲染数据模型并将内容展示给用户,而视图解析器是将逻辑 ...
- Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图
首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以 ...
- 开发 Spring 自定义视图和视图解析器
Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring ...
- spring mvc框架设计与实现
spring mvc框架通过DispatcherServlet来作请求分发,主要由HandlerMapping,HandlerAdapter,HandlerInterceptor三个抽象来完成.通过H ...
最新文章
- c++ override final关键字
- cocoapods Analyzing dependencies 问题的解决方案
- qtable sorting enable中文是按照什么顺序_作为雅思过来人,你有什么话想告诫雅思小白的?...
- Tp nginx.conf 配置(Linux)
- 热启动计算机的快捷键,电脑快捷键的用法
- gradle下载很慢的解决方式
- FileZilla传输文件乱码的解决方案
- 腾讯 csig 面试简述(已通过)
- lighttpd出现mod_indexfile.so: cannot open shared object file: No such file or directory
- 数据库作业 用Python读取Excel 数据 存放到mysql中
- linux批量修改图片大小,Linux中使用Imagemagick批量调整图片大小
- xpdl关于join和split的定义的翻译。(转)
- 任正非解释华为鸿蒙系统,比Android/iOS还要快,看任正非怎么说华为鸿蒙系统
- 二、java项目常用工具类之beancopy,bean和map转换工具类
- Flink从入门到入土(详细教程)
- 来一次云台山,感受春天的温柔、夏日的魅力
- ArcGIS如何加载水经注下载的图片?
- RPG游戏-小地图系统
- DDOS检测之首包丢弃
- AcWing 1902. 马拉松(枚举)
热门文章
- 插画构图的六种基本形式,小白必看!
- 最新H5游戏小游戏集成系统400多款趣味游戏
- NVM安装nodejs的方法
- 拉姆达表达式 追加 条件判断 ExpressionFuncT, bool
- Qt中QList用法详解
- 服务熔断和服务降级的区别
- 人工智能实训室解决方案
- 第10章 对象和类 -1
- IDEA(或Android Studio)推送(push)代码报错 unable to read askpass response from ‘C:\Users\Urasaki\AppData\Loc
- 基于Linux下的VIC使用(1)VIC部分(Fortran版本)