Jsp 在Struts2中注销后如何重定向请求
该项目有一个servlet,当用户注销时调用该servletJsp 在Struts2中注销后如何重定向请求,jsp,servlets,struts2,actionresult,valuestack,Jsp,Servlets,Struts2,Actionresult,Valuestack,该项目有一个servlet,当用户注销时调用该servlet public class LogonServlet extends HttpServlet { private static final long serialVersionUID = -4899047924930198118L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExcept
public class LogonServlet extends HttpServlet {
private static final long serialVersionUID = -4899047924930198118L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setFirmAndRedirect(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setFirmAndRedirect(request, response);
}
private void setFirmAndRedirect(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String firm;
String serverPath = request.getServletPath();
firm = serverPath.replaceAll("/", "").replaceAll(".logon", "").trim()
.toLowerCase();
request.setAttribute("firm", firm);
RequestDispatcher dispatcher = request.getRequestDispatcher("/logon.do");
dispatcher.forward(request, response);
}
}
servlet尝试将请求转发到struts的logon.do操作。
以下是我的web.xml文件:
<web-app>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-defs.xml</param-value>
</context-param>
<filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>com.rolfeandnolan.ccp.filters.HibernateSessionFilter</filter-class>
</filter>
<!-- Struts 2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- Should only apply to Alerts Direct requests -->
<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>logon</servlet-name>
<servlet-class>com.rolfeandnolan.ccp.servlets.LogonServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logon</servlet-name>
<url-pattern>*.logon</url-pattern>
</servlet-mapping>
org.apache.tiles.impl.basictelescontainer.DEFINITIONS\u CONFIG
/WEB-INF/tiles-defs.xml
HibernateSessionFilter
com.rolfeandnolan.ccp.filters.HibernateSessionFilter
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
HibernateSessionFilter
*.做
支柱2
/*
登录
com.rolfeandnolan.ccp.servlets.LogonServlet
登录
*.登录
LogonServlet用于根据以下struts.xml为注销请求提供服务:
<action name="logoff"
class="com.rolfeandnolan.ccp.struts.actions.LogoffAction">
<param name="allowedRoles">admin,margin,alerts,limitadmin,workfloweditor,eval,theocalc,stress,alertscustomer,useradmin</param>
<result name="success">/logon.jsp</result>
<result name="firmlogon" type="dispatcher">
<param name="location">${firm}.logon</param>
</result>
</action>
管理员、边距、警报、限制管理员、工作流编辑器、评估、theocalc、压力、警报管理员、用户管理员
/logon.jsp
${firm}.logon
在转发时,它给出404错误:
HTTP状态404-/ccpserver/logon.do
类型状态报告
消息/ccpserver/logon.do
说明请求的资源(/ccpserver/logon.do)不可用。
JBoss-Web/2.1.3.GA
点击直接URL
http://localhost:8080/ccpserver/logon.do
,工作正常。您有LogonServlet
用于登录您正在使用的/logon.do
。稍后在setfirmandedirect
方法中的同一个servlet中,为什么要将请求转发到同一url
?i、 e,/logon.do
您需要另一个url,如/logout
,它是一个包含您的注销代码的servlet。该注销的映射应如下所示:
RequestDispatcher dispatcher = request.getRequestDispatcher("logout");
dispatcher.forward(request, response);
<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>com.rolfeandnolan.ccp.servlets.logout</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
RequestDispatcher=request.getRequestDispatcher(“注销”);
转发(请求、响应);
注销
com.rolfeandnolan.ccp.servlets.logout
注销
/注销
如果在值堆栈中有固定值
,则不需要servlet。注销后,应使用重定向类型结果重定向到登录操作
此结果使用
ActionMapperFactory
将浏览器重定向到调用
指定的操作和(可选)命名空间。这比这个好
ServletRedirectResult
,因为它不需要您对
ActionMapper
在struts.xml中处理的URL模式
配置文件。这意味着您可以在以下位置更改URL模式:
任何一点,您的应用程序仍将工作。这是强烈的
建议在重定向到其他操作时,使用
此结果而不是标准重定向结果
请参阅下面的示例,以了解如何使用请求参数
过去了
更多细节
你可以编写代码
登录
/
${firm}
它没有重定向到同一URL。当我们注销时,URL是/logoff.do,它由struts.xml设置提供并发送到${firmName}。logon这是一个新的URL,由LogonServlet提供,它尝试将它转发到/logon.do,但失败解决方案对我有效,但我仍然无法理解为什么从servlet转发不起作用。您不应该转发到servlet,请参阅