Java 为什么WEB-INF文件夹中的jsp文件有效,但放在WEB-INF文件夹下的jsp文件无效';T
当我的jsp文件位于WEB-INF文件夹(如/WEB-INF/file.jsp)中时,我可以从localhost:8080/ProjectCtxtRoot/访问它们,但如果它们位于/WEB-INF/jsp/file.jsp中,我就无法访问它们 我在web.xml中更改了欢迎列表标记中的路径,如下所示Java 为什么WEB-INF文件夹中的jsp文件有效,但放在WEB-INF文件夹下的jsp文件无效';T,java,spring,jsp,spring-mvc,web,Java,Spring,Jsp,Spring Mvc,Web,当我的jsp文件位于WEB-INF文件夹(如/WEB-INF/file.jsp)中时,我可以从localhost:8080/ProjectCtxtRoot/访问它们,但如果它们位于/WEB-INF/jsp/file.jsp中,我就无法访问它们 我在web.xml中更改了欢迎列表标记中的路径,如下所示 <welcome-file-list> <welcome-file>/JSP/fileName.jsp</welcome-file> </we
<welcome-file-list>
<welcome-file>/JSP/fileName.jsp</welcome-file>
</welcome-file-list>
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/"
p:suffix=".jsp" />
而且它不适用于上述任何URL
但它在工作的时候
<welcome-file-list>
<welcome-file>/fileName.jsp</welcome-file>
</welcome-file-list>
/fileName.jsp
dispatcher-servlet.xml,如下所示
<welcome-file-list>
<welcome-file>/JSP/fileName.jsp</welcome-file>
</welcome-file-list>
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/"
p:suffix=".jsp" />
用于上述情况的Url是localhost:8080/ContextRoot/并且可以正常工作
我使用TomcatV7.0服务器。我在EclipseIDE中刷新我的项目,然后清理它,构建它,使用mvn clean install构建war,然后从tomcat manager主页选择war并部署它。我每次都这样做
这就是dipatcher-servlet.xml在整个过程中的外观。我只是改变了如上所述的特定部分
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.projectName.www" />
<!-- Factory bean that creates the Mongo instance -->
<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
<property name="host" value="localhost" />
</bean>
<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo" />
<constructor-arg name="databaseName" value="tableName" />
</bean>
<!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<!-- <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>
<bean class=
"org.springframework.web.servlet.view.tiles2.TilesConfigurer"> -->
<!-- <property name="definitions">
<list>
<value>/WEB-INF/views/views.xml</value>
</list>
</property>
</bean> -->
</beans>
这就是我的web.xml的样子
<web-app>
<!-- <display-name>Archetype Created Web Application</display-name> -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/src/main/webapp/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>
<!-- <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> -->
<welcome-file-list>
<welcome-file>/fileName.jsp</welcome-file>
</welcome-file-list>
</web-app>
调度员
org.springframework.web.servlet.DispatcherServlet
1.
调度员
/
上下文配置位置
/WEB-INF/dispatcher-servlet.xml
/fileName.jsp
嗯。当我将整个jsp文件夹从/webapp/WEB-INF/jsp/fileName.jsp移到/webapp/jsp/fileName.jsp时,它就可以工作了。我想知道
1.为什么它现在有效?
2.这是正确的做事方式吗?
3.当url为localhost:8080/CtxtRoot/jsp/或localhost:8080/CtxtRoot/jsp/search.jsp时,它起作用,但对localhost:8080/AnnaUnivResults/jsp/search不起作用。为什么会这样?WEB-INF之外的所有内容都是公开的,没有对其应用身份验证(我们可以通过在WEB.xml中定义scurity约束来应用),但WEB-INF内部的所有资源都是安全的。您可以在WEB-INF外部保留静态页面,也可以在WEB-INF内部保留动态页面,如配置文件、帐户。
请交叉核对我可能错了。我认为这里有几个问题:
localhost:8080/CtxtRoot/jsp/
,那么服务器上可以有一个上下文根为“CtxtRoot”的web应用程序,它将处理该请求。或者,您可以有一个应用程序,该应用程序的上下文为“”,并且它可以处理该请求。这取决于您如何配置服务器,默认情况下,Tomcat将使用war名称作为上下文根localhost:8080/CtxtRoot/jsp/
的请求,web应用程序将基于“jsp”作为路径来路由内容localhost:8080/CtxtRoot/jsp/
,而上下文根是“CtxtRoot”,那么web应用程序会将“/jsp/”与所有servlet映射进行比较。对WEB-INF中静态资源的请求将始终被拒绝,但servlet和过滤器可以并且确实从WEB-INF返回数据http://localhost:8080/app/mvc/sales
李>