感谢回复上个帖子的朋友,感觉自己没有表达清楚,特重发,付上代码: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>下面继续。。

解决方案 »

  1.   

    LogonAction.java
    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, 用户名”,但是“刷新”后就会提示未登陆了。
    罗嗦了两大篇,其实是我不会表达,只好把东西都放上来,代码应该问题多多,幼稚多多。我是新手我怕谁,不要笑话我 ^-^
      

  2.   

    刚看到LogoutAction里面把request.getSession(false).removeAttribute("userbean")屏蔽了,不过不屏蔽效果也是一样的。大家帮忙看看。
      

  3.   

    那是自然,原因是ie会自动记录你的网页内容
    你后退的时候,ie读入的是原有的页面,自然时登陆
    而你刷新是重新向服务器发送了一次请求,这时因为session已经remove了,所以未登陆
      

  4.   

    谢谢楼上,我说的不是这个问题,是登出、后退、刷新后还登陆在上面,没有登出。不过现在已经能解决了,在<forward >中加了个redirect。