在webapps目录下,部署了一个web 工程 :ttest
ttest的目录结构如下图:
ttest
WEB-INF
classes
lib
struts-config.xml
struts-html.tld
struts-bean.tld
struts-html.tld
struts-logic.tld
web.xml
xhtmlmp
login.jsp
*****.jsp
login.jsp
*****.jsp
问题描述:
工程采用jsp+struts 来实现。 在ttest 的目录下有一部分jsp文件,同时在其子目录xhtmlmp目录下也有一部分jsp文件。
把ttest部署到tomcat 的webapps目录下以后,
如果以ip地址的形式 来访问这两部分jsp文件,请求的action ,可以进行处理
例如:
192.168.22.228:8080/ttest/login.jsp 请求loginAction ,可以请求action 没问题。
192.168.22.228:8080/ttest/xhtmlmp/login.jsp 请求mobileLoginAction ,也没问题。现在的问题是 通过配置虚拟站点,来进行访问这两部分jsp 就有问题了。
ttest下的jsp文件可以 请求对应的action,但是子目录里的xhtmlmp中的jsp 文件 就无法请求到 action,页面会报出404错误!
例如:
http://mmvd.ttest.com/ttest/login.jsp 这个地址可以请求到action
http://mmvd.ttest.com/xhtmlmp/login.jsp 这个地址就 无法请求action !我在tomcat的 conf目录中的server.xml 中 配置了 一个Host 元素:
<Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/ttest/"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/usr/local/tomcat/webapps/ttest" debug="0" reloadable="true" />
<Context path="/wml" docBase="/usr/local/tomcat/webapps/wml">
</Context>
<Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/>
<Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile">
</Context>
</Host>
另外 在ttest工程下的WEB-INF目录里,strtuts-config.xml的部分信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
<form-beans>
<form-bean name="loginActionForm" type="com.ttest.pc.LoginActionForm" />
<form-bean name="mobileLoginActionForm" type="com.ttest.mobile.MobileLoginActionForm" />
<action-mappings>
<!-- ****************************** ttest *********************************** -->
<action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="session" type="com.ttest.pc.LoginAction" validate="false">
<forward name="retrieve" path="/retrieve.jsp" redirect="false" />
<forward name="login" path="/login.jsp" redirect="true" />
</action>
<action name="mobileLoginActionForm" path="/xhtmlmp/mobileLoginAction" scope="request" type="com.ttest.mobile.MobileLoginAction" validate="false">
<forward name="retrieve" path="/xhtmlmp/retrieve.jsp" redirect="false" />
<forward name="login" path="/xhtmlmp/login.jsp" redirect="true" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>
ttest的目录结构如下图:
ttest
WEB-INF
classes
lib
struts-config.xml
struts-html.tld
struts-bean.tld
struts-html.tld
struts-logic.tld
web.xml
xhtmlmp
login.jsp
*****.jsp
login.jsp
*****.jsp
问题描述:
工程采用jsp+struts 来实现。 在ttest 的目录下有一部分jsp文件,同时在其子目录xhtmlmp目录下也有一部分jsp文件。
把ttest部署到tomcat 的webapps目录下以后,
如果以ip地址的形式 来访问这两部分jsp文件,请求的action ,可以进行处理
例如:
192.168.22.228:8080/ttest/login.jsp 请求loginAction ,可以请求action 没问题。
192.168.22.228:8080/ttest/xhtmlmp/login.jsp 请求mobileLoginAction ,也没问题。现在的问题是 通过配置虚拟站点,来进行访问这两部分jsp 就有问题了。
ttest下的jsp文件可以 请求对应的action,但是子目录里的xhtmlmp中的jsp 文件 就无法请求到 action,页面会报出404错误!
例如:
http://mmvd.ttest.com/ttest/login.jsp 这个地址可以请求到action
http://mmvd.ttest.com/xhtmlmp/login.jsp 这个地址就 无法请求action !我在tomcat的 conf目录中的server.xml 中 配置了 一个Host 元素:
<Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/ttest/"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/usr/local/tomcat/webapps/ttest" debug="0" reloadable="true" />
<Context path="/wml" docBase="/usr/local/tomcat/webapps/wml">
</Context>
<Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/>
<Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile">
</Context>
</Host>
另外 在ttest工程下的WEB-INF目录里,strtuts-config.xml的部分信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
<form-beans>
<form-bean name="loginActionForm" type="com.ttest.pc.LoginActionForm" />
<form-bean name="mobileLoginActionForm" type="com.ttest.mobile.MobileLoginActionForm" />
<action-mappings>
<!-- ****************************** ttest *********************************** -->
<action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="session" type="com.ttest.pc.LoginAction" validate="false">
<forward name="retrieve" path="/retrieve.jsp" redirect="false" />
<forward name="login" path="/login.jsp" redirect="true" />
</action>
<action name="mobileLoginActionForm" path="/xhtmlmp/mobileLoginAction" scope="request" type="com.ttest.mobile.MobileLoginAction" validate="false">
<forward name="retrieve" path="/xhtmlmp/retrieve.jsp" redirect="false" />
<forward name="login" path="/xhtmlmp/login.jsp" redirect="true" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>
解决方案 »
- spring 定时任务中调用context 报异常NullPointer
- 在struts中如何用标签表示一个变量是否等于‘0’或‘3’字符型的)
- hibernate的数据操作出现 断点
- 关于XML字符串反序列化的讨论
- servlet 怎样调用 部署在JFox中的 EJB3.0
- Spring的超级菜鸟问题
- 我把jbuilder和weblogic连起来了,作了一个最简单的servlet。部署也成功了(起码没包错)不过我访问时 http://localhost:7001/firstWebAp
- weblogic+jb瓜瓜问题
- 找相关WebService的书籍
- 编译时找不到ejb包?在线等待
- XFire开发中的怎么实现不修改配置文件就可以访问WebService架包中的方法。
- jstl标签跟structs标签使用遇到的问题?
页面输入的url必须包含ttest 才可以。
例如:
我修改了tomcat下conf目录里的 server.xml 文件:
<Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/usr/local/tomcat/webapps/ttest" debug="0" reloadable="true" />
<Context path="/wml" docBase="/usr/local/tomcat/webapps/wml">
</Context>
<Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/>
<Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile">
</Context>
</Host>
我去掉了webapps/ 后面的ttest, 这时如果在访问xhtmlmp的jsp文件,请求action是可以识别的
例如: mmvd.ttest.com/ttest/xhtmlmp/login.jsp 可以请求到 mobileLoginAction
觉得问题的原因是 如果以虚拟站点的形式来实现页面间的action请求,页面地址栏的url必须包含项目本身名称。但是我目前的业务要求,必须按照这个路径来访问实现:
http://mmvd.ttest.com/xhtmlmp/login.jsp
也就是说在server.xml里,host的配置必须是这个样子:
<Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/ttest/"
mmvd.ttest.com 指向的路径是tomcat中webapps目录里的ttest
而不是webapps目录!哪位高手能给解决下。。不胜感激。。
Ip形式访问
192.168.22.228:8080/ttest/login.jsp 请求loginAction ,可以请求action 没问题。
192.168.22.228:8080/ttest/xhtmlmp/login.jsp 请求mobileLoginAction ,也没问题。
通过配置host,以虚拟站点形式访问:
http://mmvd.ttest.com/ttest/login.jsp 这个地址可以请求到action
http://mmvd.ttest.com/xhtmlmp/login.jsp 这个地址就 无法请求action !host的配置就是这个样子,而且要求不能改变:
<Host name="mmvd.ttest.com" appBase="/usr/local/tomcat/webapps/ttest/"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/usr/local/tomcat/webapps/ttest" debug="0" reloadable="true" />
<Context path="/wml" docBase="/usr/local/tomcat/webapps/wml">
</Context>
<Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/>
<Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile">
</Context>
</Host>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
在页面里输出 <% =basePath %>配置虚拟路径后 请求时显示的有什么差别
<Context path="/wml" docBase="/usr/local/tomcat/webapps/wml">
</Context>
<Context path="/xhtmlmp" docBase="/usr/local/tomcat/webapps/ttest/xhtmlmp"/>
<Context path="/mmsFile" docBase="/usr/local/mmvd/mmsFile">
</Context>
有问题!
Ip形式访问
192.168.22.228:8080/ttest/login.jsp 请求loginAction ,可以请求action 没问题。
192.168.22.228:8080/ttest/xhtmlmp/login.jsp 请求mobileLoginAction ,也没问题。
通过配置host,以虚拟站点形式访问:
http://mmvd.ttest.com/login.jsp 这个地址可以请求到loginAction (这个url 没有ttest)
http://mmvd.ttest.com/xhtmlmp/login.jsp 这个地址就 无法请求mobileLoginAction !
会报一个404的错误: The requested resource (/xhtmlmp/mobileLoginAction.do) is not available. 事实上,我请求的路径,解析之后是对的。 可是因为走了虚拟站点这一层,就无法请求到action了。
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
在页面里输出 <% =basePath %> 使用这样的请求路径试试 <%=basePath%>mobileLoginAction.do
<action name="mobileLoginActionForm" path="/xhtmlmp/mobileLoginAction" scope="request" type="com.ttest.mobile.MobileLoginAction" validate="false"> 改成:
<action name="mobileLoginAction" path="/xhtmlmp/mobileLoginAction" scope="request" type="com.ttest.mobile.MobileLoginAction" validate="false">