我正在用Spring开发一个网站,并试图提供不是. jsp文件的资源(例如. html)
现在我已经注解掉了servlet配置的这一部分
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
并试图从控制器返回资源的完整路径。
@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";
}
}
index.html
文件存在于该文件夹中。
注意:当我将index.html
更改为index.jsp
时,我的服务器现在可以正确地提供页面。
谢谢你。
9条答案
按热度按时间xxe27gdn1#
最初的问题是,配置指定了一个属性
suffix=".jsp"
,因此ViewResolver实现类会将.jsp
添加到从方法返回的视图名称的末尾。然而,由于您注解掉了
InternalResourceViewResolver
,根据应用程序配置的其余部分,可能没有注册任何其他ViewResolver,您可能会发现现在什么都不工作。因为
.html
文件是静态的,不需要servlet处理,所以使用<mvc:resources/>
Map会更有效、更简单,这需要Spring 3.0.4+。例如:
其将把以
/static/
开始的所有请求 * 传递 * 到webapp/static/
目录。因此,通过将
index.html
放入webapp/static/
并从方法中使用return "static/index.html";
,Spring应该可以找到视图。bhmjp9jg2#
我只想补充一点,您不需要为此实现控制器方法,因为您可以在servlet配置文件中使用view-controller标记(Spring 3):
mwecs4sa3#
首先要了解以下内容:呈现jsp文件的不是spring,而是JspServlet(org.apache.jasper.servlet.jspServlet)。此servlet随Tomcat(jasper编译器)一起提供,而不是随spring一起提供。此JspServlet知道如何编译jsp页面以及如何将其作为html文本返回给客户端。Tomcat中的JspServlet默认情况下仅处理符合以下两种模式的请求:* . jsp和 *. jspx。
现在,当spring使用
InternalResourceView
(或JstlView
)渲染视图时,实际上会发生三件事:1.从模型中获取所有模型参数(由控制器处理程序方法返回,即
"public ModelAndView doSomething() { return new ModelAndView("home") }"
)1.将这些模型参数公开为请求属性(以便JspServlet可以读取)
1.将请求转发到JspServlet。
RequestDispatcher
知道每个 *. jsp请求都应该转发到JspServlet(因为这是Tomcat的默认配置)当你简单地将视图名改为home.html时,tomcat将 * 不 * 知道如何处理请求,这是因为没有servlet处理 *. html请求。
如何解决这个问题。有三个最明显的解决方案:
1.公开html作为资源文件
1.指示JspServlet也处理 *. html请求
1.编写您自己的servlet(或将请求传递给另一个现有的servlet到 *. html)。
完整的代码示例如何实现这一点,请参考我的答案在另一个职位:如何在Spring MVC中将请求Map到HTML文件?
mwyxok5s4#
您仍然可以继续使用相同的视图解析器,但将后缀设置为空。
现在您的代码可以选择返回index.html或index.jsp,如下例所示-
dxpyg8gm5#
我遇到了同样的问题,尝试了各种解决方案从SpringMVC加载html页面,以下解决方案对我很有效
服务器的web.xml注解中的步骤1如下两行
步骤2:在应用程序的web xml中输入以下代码
步骤3创建静态控制器类
在Spring配置文件的步骤4中,将后缀更改为.htm
步骤5将页面重命名为.htm文件并将其存储在WEB-INF中,然后构建/启动服务器
cig3rfwq6#
html文件(本例中为index.html)的Java配置:
k4emjkb17#
相应地更改p:suffix=".jsp”值,否则我们可以开发自定义视图解析器
http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/UrlBasedViewResolver.html
xt0899hw8#
听起来你是想做这样的事情:
如果是这样的话,正如前面提到的,最有效的方法是让Web服务器(而不是Spring)将HTML请求作为静态资源来处理。
1.将所有.html、.css、.js、.png等请求转发到Web服务器的资源处理程序
1.将所有其他请求Map到Spring控制器
这里有一个方法来实现这一点...
web.xml-将servletMap到根目录(/)
Spring Java配置
其他注意事项
wlzqhblo9#
如果使用spring Boot ,则不能在www.example.com文件中设置属性
spring.mvc.view.prefix
和spring.mvc.view.suffix
application.properties,而是从配置类配置beanViewResolver
。application.properties
主要方法
配置类
控制器类
你必须把你的文件放在目录
/webapp/views/guest/index.html
中,小心,webapp目录在resources目录之外。通过这种方式,您可以使用spring-mvc的url模式,但服务于静态上下文。