在我的Spring MVC应用程序中使用HttpServletRequest?有什么好处?

时间:2013-10-27 20:36:48

标签: java servlets spring-mvc

我在公司的java代码中遇到了身份验证代码。该应用程序是一组基于Spring MVC构建的REST服务。在HttpServletRequest对象上的一个名为getHeader()的身份验证服务中调用了一个方法。并且该方法检索AuthId。为什么他们会在spring MVC应用程序中使用HttpServletRequest?在spring应用程序中使用此servlet类型代码有什么好处?这种方法会做什么?任何替代方案?

3 个答案:

答案 0 :(得分:1)

Spring MVC构建于Servlet API之上。你可以使用Servlet做任何事情,因此可以使用Spring MVC。 Spring MVC框架提供的是以特定体系结构样式编写Web应用程序代码的包装器。这个包装器增加了行为,有时简化了任务。

  

为什么他们会在spring MVC应用程序中使用HttpServletRequest?

在这种情况下,因为它是获取标题的最直接方式。

  

在spring中使用此servlet类型代码有什么好处   应用?

春天不需要包装任何东西。你直接从源头获得它。

  

这种方法会做什么?

Read the javadoc.

  

任何替代方案?

@Controller课程中#39; handler方法,您可以声明一个用@RequestHeader注释的参数,并让Spring传递一个它从HttpServletRequest标头中检索的参数。

默认情况下,这仅限于使用@Controller注释的@RequestMapping方法。如果您的服务类是HandlerInterceptorFilter或其他类型的类,并且只是对HttpServletRequest对象的引用,那么您无法再使用{直接检索它{1}}。

答案 1 :(得分:1)

Spring MVC在HttpServletRequest之上提供了许多精彩的抽象,因此您可以避免其低级实现细节。您很少需要直接访问它。

例如,您可以获得类似Content-Type的标头值:

@GET
@Path("/myService")
public Response doSomething(@HeaderParam("Content-Type") String contentType) {
...
}

但有时您确实需要直接访问HttpServletRequest - 通常在您使用其他需要它的API时。如果你正在使用一个需要HttpServletRequest的方法的其他库,那么你必须直接从Spring MVC中获取它。

例如,请在此随机UrlUtil class中查看此方法:

public static String encodeUrlPathSegment(String pathSegment, HttpServletRequest httpServletRequest) {
//Get a path segment
}

你别无选择,只能从Spring MVC中获取HttpServletRequest

答案 2 :(得分:0)

这是另一种选择:Spring MVC定义参数注释@RequestHeader以读取httpServletRequest头文件:

@RequestMapping(...)
public @ResponseBody String myMethod(@RequestHeader String AuthId){
    //the value of the parameter AuthId is the value of request header named AuthId
    ...
}