感谢回复上个帖子的朋友,感觉自己没有表达清楚,特重发,付上代码:index.jsp
<%@ page contentType="text/html" language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><html:html locale="true">
<head><title><bean:message key="index.jsp.title"/></title></head>
<body>
<bean:message key="index.jsp.welcome"/><p>
<bean:message key="index.jsp.register"/>
<html:form action="register.act">
<bean:message key="index.jsp.inputusername"/>
<html:text property="userName" size="16" maxlength="50"/><br>
<bean:message key="index.jsp.inputpassword"/>
<html:password property="password" size="16" maxlength="16"/><br><br>
<html:submit property="submit" value="Register"/>
<html:reset/>
</html:form>
<bean:message key="index.jsp.logon"/>
<html:form action="logon.act">
<bean:message key="index.jsp.inputusername"/>
<html:text property="userName" size="16" maxlength="50"/><br>
<bean:message key="index.jsp.inputpassword"/>
<html:password property="password" size="16" maxlength="16"/><br><br>
<html:submit property="submit" value="Logon"/>
<html:reset/>
</html:form>
<html:errors/>
</body>
</html:html>mainmenu.jsp
<%@ page contentType="text/html" language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<html:html locale="true">
<head><title><bean:message key="mainmenu.jsp.title"/></title></head>
<body>
<logic:present name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.hello"/>
<bean:write name="userbean" property="userName" scope="session"/>
</font>
<html:form action="logout.act">
<html:submit property="submit" value="Log out"/>
</html:form>
<html:form action="toinsert.act">
<html:submit property="submit" value="Insert Address"/>
</html:form>
<html:form action="toquery.act">
<html:submit property="submit" value="Query Address"/>
</html:form>
</logic:present>
<logic:notPresent name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.logon.first"/>
</font>
<html:form action="backtologon.act">
<html:submit property="submit" value="Back to log on"/>
</html:form>
</logic:notPresent>
</body>
</html:html>insert.jsp
<%@ page contentType="text/html" language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><html:html locale="true">
<head><title><bean:message key="insert.jsp.title"/></title></head>
<body>
<logic:present name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.hello"/>
<bean:write name="userbean" property="userName" scope="session"/>
</font>
<html:form action="logout.act">
<html:submit property="submit" value="Log out"/>
</html:form>
<html:form action="tomainmenu.act">
<html:submit property="submit" value="To MainMenu"/>
</html:form>
<bean:message key="insert.jsp.insert"/>
<html:form action="insert.act" focus="name">
<bean:message key="insert.jsp.insert.name"/><html:text property="name" size="100" maxlength="50"/><br>
<bean:message key="insert.jsp.insert.phone"/><html:text property="phone" size="100" maxlength="50"/><br>
<bean:message key="insert.jsp.insert.address"/><html:text property="address" size="100" maxlength="100"/><br>
<html:submit property="submit" value="Submit"/><html:reset/>
</html:form>
<html:errors/>
</logic:present> <logic:notPresent name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.logon.first"/>
</font>
<html:form action="backtologon.act">
<html:submit property="submit" value="Back to log on"/>
</html:form>
</logic:notPresent>
</body>
</html:html>struts-config.xml
<struts-config>
<form-beans>
<form-bean type="UserRegisterForm" name="userregisterform"/>
<form-bean type="UserLogonForm" name="userlogonform"/>
<form-bean type="AddressBookForm" name="addressbookform"/>
<form-bean type="NameForm" name="nameform"/>
</form-beans>
<action-mappings>
<action path="/register" type="RegisterAction" name="userregisterform" validate="true" scope="request" input="/index.jsp"/>
<action path="/logon" type="LogonAction" name="userlogonform" validate="true" scope="request" input="/index.jsp">
<forward name="MainMenu" path="/mainmenu.jsp"/>
</action>
<action path="/logout" type="LogoutAction" name="userlogonform" validate="false" scope="request" input="/index.jsp"/>
<action path="/backtologon" type="ToAction" name="userlogonform" validate="false" scope="request" input="/index.jsp"/>
<action path="/toinsert" type="ToAction" name="userlogonform" validate="false" scope="request" input="/insert.jsp"/>
<action path="/insert" type="InsertAction" name="addressbookform" validate="true" scope="request" input="/insert.jsp"/>
<action path="/toquery" type="ToAction" name="userlogonform" validate="false" scope="request" input="/query.jsp"/>
<action path="/tomainmenu" type="ToAction" name="userlogonform" validate="false" scope="request" input="/mainmenu.jsp"/>
<action path="/querywithname" type="QueryWithNameAction" name="nameform" validate="true" scope="request" input="/query.jsp"/>
<action path="/queryall" type="QueryAllAction" name="userlogonform" validate="false" scope="request" input="/query.jsp"/>
</action-mappings>
<message-resources parameter="keys"/>
</struts-config>web.xml
<web-app>
<servlet>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<servlet-name>action</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.act</url-pattern>
</servlet-mapping>
</web-app>下面继续。。
<%@ page contentType="text/html" language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><html:html locale="true">
<head><title><bean:message key="index.jsp.title"/></title></head>
<body>
<bean:message key="index.jsp.welcome"/><p>
<bean:message key="index.jsp.register"/>
<html:form action="register.act">
<bean:message key="index.jsp.inputusername"/>
<html:text property="userName" size="16" maxlength="50"/><br>
<bean:message key="index.jsp.inputpassword"/>
<html:password property="password" size="16" maxlength="16"/><br><br>
<html:submit property="submit" value="Register"/>
<html:reset/>
</html:form>
<bean:message key="index.jsp.logon"/>
<html:form action="logon.act">
<bean:message key="index.jsp.inputusername"/>
<html:text property="userName" size="16" maxlength="50"/><br>
<bean:message key="index.jsp.inputpassword"/>
<html:password property="password" size="16" maxlength="16"/><br><br>
<html:submit property="submit" value="Logon"/>
<html:reset/>
</html:form>
<html:errors/>
</body>
</html:html>mainmenu.jsp
<%@ page contentType="text/html" language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<html:html locale="true">
<head><title><bean:message key="mainmenu.jsp.title"/></title></head>
<body>
<logic:present name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.hello"/>
<bean:write name="userbean" property="userName" scope="session"/>
</font>
<html:form action="logout.act">
<html:submit property="submit" value="Log out"/>
</html:form>
<html:form action="toinsert.act">
<html:submit property="submit" value="Insert Address"/>
</html:form>
<html:form action="toquery.act">
<html:submit property="submit" value="Query Address"/>
</html:form>
</logic:present>
<logic:notPresent name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.logon.first"/>
</font>
<html:form action="backtologon.act">
<html:submit property="submit" value="Back to log on"/>
</html:form>
</logic:notPresent>
</body>
</html:html>insert.jsp
<%@ page contentType="text/html" language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><html:html locale="true">
<head><title><bean:message key="insert.jsp.title"/></title></head>
<body>
<logic:present name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.hello"/>
<bean:write name="userbean" property="userName" scope="session"/>
</font>
<html:form action="logout.act">
<html:submit property="submit" value="Log out"/>
</html:form>
<html:form action="tomainmenu.act">
<html:submit property="submit" value="To MainMenu"/>
</html:form>
<bean:message key="insert.jsp.insert"/>
<html:form action="insert.act" focus="name">
<bean:message key="insert.jsp.insert.name"/><html:text property="name" size="100" maxlength="50"/><br>
<bean:message key="insert.jsp.insert.phone"/><html:text property="phone" size="100" maxlength="50"/><br>
<bean:message key="insert.jsp.insert.address"/><html:text property="address" size="100" maxlength="100"/><br>
<html:submit property="submit" value="Submit"/><html:reset/>
</html:form>
<html:errors/>
</logic:present> <logic:notPresent name="userbean" scope="session">
<font size="2" color="blue">
<bean:message key="mainmenu.jsp.logon.first"/>
</font>
<html:form action="backtologon.act">
<html:submit property="submit" value="Back to log on"/>
</html:form>
</logic:notPresent>
</body>
</html:html>struts-config.xml
<struts-config>
<form-beans>
<form-bean type="UserRegisterForm" name="userregisterform"/>
<form-bean type="UserLogonForm" name="userlogonform"/>
<form-bean type="AddressBookForm" name="addressbookform"/>
<form-bean type="NameForm" name="nameform"/>
</form-beans>
<action-mappings>
<action path="/register" type="RegisterAction" name="userregisterform" validate="true" scope="request" input="/index.jsp"/>
<action path="/logon" type="LogonAction" name="userlogonform" validate="true" scope="request" input="/index.jsp">
<forward name="MainMenu" path="/mainmenu.jsp"/>
</action>
<action path="/logout" type="LogoutAction" name="userlogonform" validate="false" scope="request" input="/index.jsp"/>
<action path="/backtologon" type="ToAction" name="userlogonform" validate="false" scope="request" input="/index.jsp"/>
<action path="/toinsert" type="ToAction" name="userlogonform" validate="false" scope="request" input="/insert.jsp"/>
<action path="/insert" type="InsertAction" name="addressbookform" validate="true" scope="request" input="/insert.jsp"/>
<action path="/toquery" type="ToAction" name="userlogonform" validate="false" scope="request" input="/query.jsp"/>
<action path="/tomainmenu" type="ToAction" name="userlogonform" validate="false" scope="request" input="/mainmenu.jsp"/>
<action path="/querywithname" type="QueryWithNameAction" name="nameform" validate="true" scope="request" input="/query.jsp"/>
<action path="/queryall" type="QueryAllAction" name="userlogonform" validate="false" scope="request" input="/query.jsp"/>
</action-mappings>
<message-resources parameter="keys"/>
</struts-config>web.xml
<web-app>
<servlet>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<servlet-name>action</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.act</url-pattern>
</servlet-mapping>
</web-app>下面继续。。
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.sql.*;public final class LogonAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{
ActionErrors errors=new ActionErrors();
Class.forName(Constants.Cons_jdbc_driver).newInstance();
Connection connection=DriverManager.getConnection(Constants.Cons_jdbc_url,Constants.Cons_jdbc_user,Constants.Cons_jdbc_password);
String sql="SELECT password FROM AddressBook.user WHERE username=?";
PreparedStatement ps=connection.prepareStatement(sql);
ps.setString(1,((UserLogonForm)form).getUserName());
String password=null;
try{ ResultSet resultSet=ps.executeQuery();
resultSet.next();
password=resultSet.getString(1);
}catch(SQLException e){
connection.close();
errors.add("UsernameNotExist",new ActionMessage("username.not.exist"));
this.saveErrors(request,errors);
request.removeAttribute(mapping.getAttribute());
return (new ActionForward(mapping.getInput()));
}
connection.close();
if(password.equals(((UserLogonForm)form).getPassword())){
UserBean ub=new UserBean();
ub.setUserName(((UserLogonForm)form).getUserName());
request.removeAttribute(mapping.getAttribute());
request.getSession(false).setAttribute("userbean",ub);
return mapping.findForward("MainMenu");
}
else{
errors.add("WrongPassword",new ActionMessage("wrong.password"));
this.saveErrors(request,errors);
request.removeAttribute(mapping.getAttribute());
return (new ActionForward(mapping.getInput()));
}
}
}
LogoutAction.java
import org.apache.struts.action.*;
import javax.servlet.http.*;public final class LogoutAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{
request.removeAttribute(mapping.getAttribute());
//request.getSession(false).removeAttribute("userbean");
request.getSession(false).invalidate();
ActionErrors errors=new ActionErrors();
errors.add("LogOutSuccessful",new ActionMessage("log.out.successful"));
this.saveErrors(request,errors);
ActionForward actionForward=new ActionForward(mapping.getInput());
return actionForward;
}
}UserLogonForm
import org.apache.struts.action.*;
import javax.servlet.http.*;public final class UserLogonForm extends ActionForm{
private String userName=null;
private String password=null;
public void setUserName(String UserName){
this.userName=UserName;
}
public void setPassword(String Password){
this.password=Password;
}
public String getUserName(){
return userName;
}
public String getPassword(){
return password;
}
public void reset(ActionMapping mapping,HttpServletRequest request){
this.userName=null;
this.password=null;
}
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
ActionErrors errors=new ActionErrors();
if(userName==null || userName.length()<1){
errors.add("UsernameEmpty",new ActionMessage("username.cannot.be.empty"));
request.removeAttribute(mapping.getAttribute());
}
else if(password==null || password.length()<1){
errors.add("PasswordEmpty",new ActionMessage("password.cannot.be.empty"));
}
return errors;
}
}UserBean.java
public final class UserBean{
private String userName=null;
public void setUserName(String UserName){
this.userName=UserName;
}
public String getUserName(){
return userName;
}
}
问题是:
从index.jsp登陆成功到mainmenu.jsp后,退出转到index.jsp,浏览器“后退”,显示“Hello, 用户名”,浏览器“刷新”,仍然显示“Hello, 用户名”!
已经从session中移除userbean了,刷新应该是又执行了一次登陆,但是也已经在LogonAction的最后request.removeAttribute(mapping.getAttribute());了,为什么登陆表单的内容还没消失呢,又登陆进来了。。
而如果从insert.jsp退出到index.jsp,再“后退”,显示“Hello, 用户名”,但是“刷新”后就会提示未登陆了。
罗嗦了两大篇,其实是我不会表达,只好把东西都放上来,代码应该问题多多,幼稚多多。我是新手我怕谁,不要笑话我 ^-^
你后退的时候,ie读入的是原有的页面,自然时登陆
而你刷新是重新向服务器发送了一次请求,这时因为session已经remove了,所以未登陆