我的主页面: 这个页面在执行的时候出现问题
<%@ page language="java" pageEncoding="GBK"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>index.jsp</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head>
<body>
<logic:present name="username" scope="session">
<h4>欢迎<bean:write name="username"/></h4>
</logic:present>
<logic:notPresent scope="session" name="username">
<h4>您还未登陆</h4>
</logic:notPresent>
<html:errors/>
<center>
<html:link href="userLogon.jsp">登陆</html:link>
<logic:present name="username" scope="session">
<html:link forward="logout">注销</html:link>
</logic:present>
</center>
</body>
</html:html>
问题提示是:
009-3-4 17:23:02 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot create rewrite URL: java.net.MalformedURLException: Cannot retrieve ActionForward named logout
at org.apache.struts.taglib.html.LinkTag.calculateURL(LinkTag.java:467)
at org.apache.struts.taglib.html.LinkTag.doStartTag(LinkTag.java:341)
at org.apache.jsp.index_jsp._jspx_meth_html_005flink_005f1(index_jsp.java:371)
at org.apache.jsp.index_jsp._jspx_meth_logic_005fpresent_005f1(index_jsp.java:344)
后面省略好多....
我的struts-config.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<data-sources />
<form-beans >
<form-bean name="userLogonForm" type="com.ss.struts.form.UserLogonForm" /> </form-beans> <global-forwards>
<forward
name="logout"
path="/logout.do"/>
</global-forwards>
<action-mappings >
<action
attribute="userLogonForm"
input="/userLogon.jsp"
name="userLogonForm"
path="/userLogon"
scope="request"
type="com.ss.struts.action.UserLogonAction">
<forward name="failed" path="/userLogon.jsp" />
<forward name="success" path="/index.jsp" />
</action>
<action
path="/logout"
type="com.ss.struts.action.UserLogoutAction"
scope="request">
<forward name="return_index" path="/index.jsp"/>
</action>
</action-mappings> <message-resources parameter="com.ss.struts.ApplicationResources" />
</struts-config>需要说明的是,再没有在主页面加入:
<html:link forward="logout">注销</html:link>
这一句时程序能正常运行.我的actionpackage com.ss.struts.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class UserLogoutAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception
{
HttpSession session=request.getSession();
String username=(String)request.getAttribute("username");
if(username!=null)
session.removeAttribute("username");
return mapping.findForward("return_index");//return_index定义过了
}
}
<%@ page language="java" pageEncoding="GBK"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>index.jsp</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head>
<body>
<logic:present name="username" scope="session">
<h4>欢迎<bean:write name="username"/></h4>
</logic:present>
<logic:notPresent scope="session" name="username">
<h4>您还未登陆</h4>
</logic:notPresent>
<html:errors/>
<center>
<html:link href="userLogon.jsp">登陆</html:link>
<logic:present name="username" scope="session">
<html:link forward="logout">注销</html:link>
</logic:present>
</center>
</body>
</html:html>
问题提示是:
009-3-4 17:23:02 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot create rewrite URL: java.net.MalformedURLException: Cannot retrieve ActionForward named logout
at org.apache.struts.taglib.html.LinkTag.calculateURL(LinkTag.java:467)
at org.apache.struts.taglib.html.LinkTag.doStartTag(LinkTag.java:341)
at org.apache.jsp.index_jsp._jspx_meth_html_005flink_005f1(index_jsp.java:371)
at org.apache.jsp.index_jsp._jspx_meth_logic_005fpresent_005f1(index_jsp.java:344)
后面省略好多....
我的struts-config.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<data-sources />
<form-beans >
<form-bean name="userLogonForm" type="com.ss.struts.form.UserLogonForm" /> </form-beans> <global-forwards>
<forward
name="logout"
path="/logout.do"/>
</global-forwards>
<action-mappings >
<action
attribute="userLogonForm"
input="/userLogon.jsp"
name="userLogonForm"
path="/userLogon"
scope="request"
type="com.ss.struts.action.UserLogonAction">
<forward name="failed" path="/userLogon.jsp" />
<forward name="success" path="/index.jsp" />
</action>
<action
path="/logout"
type="com.ss.struts.action.UserLogoutAction"
scope="request">
<forward name="return_index" path="/index.jsp"/>
</action>
</action-mappings> <message-resources parameter="com.ss.struts.ApplicationResources" />
</struts-config>需要说明的是,再没有在主页面加入:
<html:link forward="logout">注销</html:link>
这一句时程序能正常运行.我的actionpackage com.ss.struts.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class UserLogoutAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception
{
HttpSession session=request.getSession();
String username=(String)request.getAttribute("username");
if(username!=null)
session.removeAttribute("username");
return mapping.findForward("return_index");//return_index定义过了
}
}
Struts HTML标签库与标准的HTML元素有相同的功能.在Struts中提倡使用Struts HTML标签.
Struts HTML标签库分为三类:用于生成基本的HTML元素标签
用于生成HTML表单的标签
显示错误或正常消息的标签
<html:html>标签:
用于生成HTML的<html>元素.标签有一个lang属性用于显示用户使用的语言
<html:html lang="true"> <html:base>标签:
用于生成HTML的<base>元素,用来生成当前网页的绝对url路径
如果在网页中使用了该标签,当该网页引用同一个应用的其他网页时,只需给出相对于当前网页的相 对URL路径<html:link>标签:
由于生成HTML的<a>元素
重要属性:
forward:指定全局转发链接
href:指定完整的URL链接
page:指定相对于当前网页的URL
例子:
1. 创建全局转发链接
首先,在配置文件中定义<forward>元素:
<global-forwards>
<forward name="index" path="/index.jsp"/>
</global-forwards>
接着,在JSP中创建标签:
<html:link forward="index">
Link
</html:link>
注意:forward属性只能引用Struts配置文件中<global-forwards>内的<forward>子元素,如果引用<action>内的将抛出下面异常:Cannot create rewrite URL:Java.net.MalformedURLException:Cannot retrieve ActionForward上网搜一下!!
<global-forwards>
<forward
name="logout"
path="/logout.do"/>
</global-forwards>