如何配置Spring View解析器以忽略特定URL但不查找其.jsp?

时间:2016-05-06 20:30:18

标签: spring jsp spring-mvc

我正在使用Spring MVC架构开发Web应用程序。我有一个控制器方法,将由ajax post()调用。控制器中的请求映射器具有“.html”(用于某些清理任务),Spring内部视图解析器正在尝试查找匹配的.JSP文件并抛出404 Not Found错误。我不想创建一个在我的情况下无用的.JSP。我需要一些帮助来确定Spring Context xml中是否有任何设置让视图解析器忽略此URL并且不查找其.JSP文件。

@RequestMapping(value = "/clearSession.html")
    public void unloadDAOSession(HttpServletRequest request) {...}

InternalViewResolver正在寻找clearSession.jsp,它会抛出404资源未找到。我不想创建一个没用的JSP。

视图解析器中是否有任何应用程序上下文设置忽略此“.html”文件而不查找其“.jsp”?

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

即使返回类型为void,也只表示视图名称将根据您看到的URL进行解析。

避免查看解决方案的一种方法是使用@ResponseBody或注释来回复响应  通过将返回类型调整为

来绕过视图解析器
@RequestMapping(value = "/clearSession.html")
public ResponseEntity<String> unloadDAOSession(HttpServletRequest request) {
   ...
    return new ResponseEntity<String>("OK",HttpStatus.NO_CONTENT);
}

这样,您只需将标题和空体添加到响应流

,而不是转发到视图

答案 1 :(得分:0)

在使用ajax和传统控制器的情况下,最好的方法是将你的控制器写入页面呈现,就像你已经完成的那样,然后为anjax请求编写一个休息终点层以用于answare。

我只是给你一些代码来清除我想说的话:

控制器层:

@RequestMapping(value = "/yourPage")
public void yourPage(Model mode) {...}

休息层:

@RequestMapping(value = "/yourAjax")
public ResponseEntity<String> yourAjax(@RequstBody YoutDTOClass postBody) {
   ...
    return ResponseEntity.created(...).build();
}



class YoutDTOClass{
// your properties
.... 

}

使用此架构,您可以分离ajax请求的服务层和用于为您的页面提供服务的经典Web层。

只是提示不要使用像/yourPage.html这样的模式,但你应该像/youtPage这样的模式。这对于Spring的视图解析器抽象的banefit来说,你应该让springMVC来解析实际的视图。

即使对于ajax,您也应该使用accept标头来询问您资源的正确表示,并且ResponseEntity应该用于返回201 Http状态,以便向浏览器说明您的资源已创建。请记住,一个更好的方法应该优先使用REST方法中的http方法,然后删除一个会话,你应该预先删除一个会话的delte方法,并把http方法用于更新会话的状态。

我希望这可以帮到你