Gle*_*eeb 66 java spring spring-mvc
我正在使用Spring开发一个网站,并且我正在尝试提供不是.jsp文件的资源(例如.html)
现在我已经注释掉了我的servlet配置的这一部分
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
Run Code Online (Sandbox Code Playgroud)
并试图从控制器返回资源的完整路径.
@Controller
public class LandingPageController {
protected static Logger logger = Logger.getLogger(LandingPageController.class);
@RequestMapping({"/","/home"})
public String showHomePage(Map<String, Object> model) {
return "/WEB-INF/jsp/index.html";
}
}
Run Code Online (Sandbox Code Playgroud)
index.html文件存在于该文件夹中.
注意:当我将index.html更改为index.jsp时,我的服务器现在正确地提供页面.
谢谢.
and*_*dyb 100
最初的问题是配置指定了一个属性,suffix=".jsp"因此ViewResolver实现类将添加.jsp到从方法返回的视图名称的末尾.
但是,由于您注释掉了InternalResourceViewResolver那时,根据应用程序配置的其余部分,可能没有注册任何其他ViewResolver.您可能会发现现在没有任何工作.
由于.html文件是静态的,并且不需要servlet处理,因此使用<mvc:resources/>映射更有效,也更简单.这需要Spring 3.0.4+.
例如:
<mvc:resources mapping="/static/**" location="/static/" />
Run Code Online (Sandbox Code Playgroud)
这将通过启动与所有请求/static/的webapp/static/目录.
因此,通过从您的方法index.html中输入webapp/static/和使用return "static/index.html";,Spring应该找到视图.
我只是补充一点,你不需要为它实现一个控制器方法,因为你可以在servlet配置文件中使用view-controller标签(Spring 3):
<mvc:view-controller path="/" view-name="/WEB-INF/jsp/index.html"/>
Run Code Online (Sandbox Code Playgroud)
问题的背景
首先要理解的是:它不是渲染jsp文件的spring.它是JspServlet(org.apache.jasper.servlet.JspServlet).这个servlet附带Tomcat(jasper编译器)而不是spring.这个JspServlet知道如何编译jsp页面以及如何将它作为html文本返回给客户端.默认情况下,tomcat中的JspServlet只处理匹配两种模式的请求:*.jsp和*.jspx.
现在当spring用InternalResourceView(或JstlView)渲染视图时,确实发生了三件事:
"public ModelAndView doSomething() { return new ModelAndView("home") }")RequestDispatcher知道应该将每个*.jsp请求转发到JspServlet(因为这是默认的tomcat配置)当您只是将视图名称更改为home.html时,tomcat将不知道如何处理请求.这是因为没有servlet处理*.html请求.
解
怎么解决这个问题.有三个最明显的解决方案:
有关完整的代码示例如何实现这一点,请在另一篇文章中回答我的答案:如何将请求映射到Spring MVC中的HTML文件?
您仍然可以继续使用相同的View解析程序,但将后缀设置为空.
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix="" />
Run Code Online (Sandbox Code Playgroud)
现在您的代码可以选择返回index.html或index.jsp,如下面的示例所示 -
@RequestMapping(value="jsp", method = RequestMethod.GET )
public String startJsp(){
return "/test.jsp";
}
@RequestMapping(value="html", method = RequestMethod.GET )
public String startHtml(){
return "/test.html";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142889 次 |
| 最近记录: |