Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet API对象

简介: 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;

相关文章
|
24天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
165 73
|
25天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
24天前
|
Java Spring
【Spring配置相关】启动类为Current File,如何更改
问题场景:当我们切换类的界面的时候,重新启动的按钮是灰色的,不能使用,并且只有一个Current File 项目,下面介绍两种方法来解决这个问题。
|
30天前
|
存储 安全 Java
Spring Boot 编写 API 的 10条最佳实践
本文总结了 10 个编写 Spring Boot API 的最佳实践,包括 RESTful API 设计原则、注解使用、依赖注入、异常处理、数据传输对象(DTO)建模、安全措施、版本控制、文档生成、测试策略以及监控和日志记录。每个实践都配有详细的编码示例和解释,帮助开发者像专业人士一样构建高质量的 API。
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
176 2
|
2月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
69 2
|
2月前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
140 0
|
8月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
7月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
134 1
|
7月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)

热门文章

最新文章

推荐镜像

更多