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对象相关推荐

  1. Spring MVC配置多个视图解析器(FreeMarker,JSP)

    Spring MVC配置多个视图解析器(FreeMarker,JSP) Spring MVC开发过程中,有时候需要多个视图解析器策略来解析视图名称,出现这个情况怎么解决? 通过"order& ...

  2. 详解Spring MVC 4之ViewResolver视图解析器

    所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...

  3. 【SpringMVC框架】小结+视图解析器配置前缀和后缀

    1.入门程序小结 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法. 前端控制器配置: 第一种:*.action,访问以.action结尾 由Dispatche ...

  4. spring MVC使用自定义的参数解析器解析参数

    目录 写在前面 编写自定义的参数解析器解析请求参数 项目结构 定义注解 实体类 controller 定义参数解析器 注册参数解析器 启动项目 发起请求查看结果 写在前面 如果还有小伙伴不知道spri ...

  5. Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解

    基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...

  6. SpringMVC的视图和视图解析器

    Java知识点总结:想看的可以从这里进入 目录 2.4.视图.视图解析器 2.4.1.视图 2.4.2.视图解析器 2.4.视图.视图解析器 视图是渲染数据模型并将内容展示给用户,而视图解析器是将逻辑 ...

  7. Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图

    首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以 ...

  8. 开发 Spring 自定义视图和视图解析器

    Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring ...

  9. spring mvc框架设计与实现

    spring mvc框架通过DispatcherServlet来作请求分发,主要由HandlerMapping,HandlerAdapter,HandlerInterceptor三个抽象来完成.通过H ...

最新文章

  1. c++ override final关键字
  2. cocoapods Analyzing dependencies 问题的解决方案
  3. qtable sorting enable中文是按照什么顺序_作为雅思过来人,你有什么话想告诫雅思小白的?...
  4. Tp nginx.conf 配置(Linux)
  5. 热启动计算机的快捷键,电脑快捷键的用法
  6. gradle下载很慢的解决方式
  7. FileZilla传输文件乱码的解决方案
  8. 腾讯 csig 面试简述(已通过)
  9. lighttpd出现mod_indexfile.so: cannot open shared object file: No such file or directory
  10. 数据库作业 用Python读取Excel 数据 存放到mysql中
  11. linux批量修改图片大小,Linux中使用Imagemagick批量调整图片大小
  12. xpdl关于join和split的定义的翻译。(转)
  13. 任正非解释华为鸿蒙系统,比Android/iOS还要快,看任正非怎么说华为鸿蒙系统
  14. 二、java项目常用工具类之beancopy,bean和map转换工具类
  15. Flink从入门到入土(详细教程)
  16. 来一次云台山,感受春天的温柔、夏日的魅力
  17. ArcGIS如何加载水经注下载的图片?
  18. RPG游戏-小地图系统
  19. DDOS检测之首包丢弃
  20. AcWing 1902. 马拉松(枚举)

热门文章

  1. 插画构图的六种基本形式,小白必看!
  2. 最新H5游戏小游戏集成系统400多款趣味游戏
  3. NVM安装nodejs的方法
  4. 拉姆达表达式 追加 条件判断 ExpressionFuncT, bool
  5. Qt中QList用法详解
  6. 服务熔断和服务降级的区别
  7. 人工智能实训室解决方案
  8. 第10章 对象和类 -1
  9. IDEA(或Android Studio)推送(push)代码报错 unable to read askpass response from ‘C:\Users\Urasaki\AppData\Loc
  10. 基于Linux下的VIC使用(1)VIC部分(Fortran版本)