1 在struts-config.xml中设置一个global-forwards
  <global-forwards>
        <forward name="login" path="/login.jsp" />
  </global-forwards>2 如你所说,在LoginAction中session.setAttribute("userName",username)3 在index.jsp中添加如下标签:如果没有登录就会跳转到login.jsp
  <logic:notPresent>
      <logic:forward name=login/>
  </logic:notPresent>

解决方案 »

  1.   

    3 改成  <logic:notPresent name=userName>
          <logic:forward name=login/>
      </logic:notPresent>
      

  2.   

    哥们请解释一下好吗,这一段<logic:notPresent name=userName>
          <logic:forward name=login/>
      </logic:notPresent>
      

  3.   

    唉,我替上面的说了。
    就是如果session变量里面没有userName这个入口,那么自动前推到login的页面。
      

  4.   

    package com.scsc.gk.rwmis;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.*;
    import java.sql.*;public class LoginAction extends Action {
      protected String checkUser(String username, String password) {
        String user = null;
        Connection conn=null;
        PreparedStatement PrepStmt=null;
        ResultSet rs=null;
        try{
          conn = DatabaseConn.getConnection();
          String selectStatement="select yhm,mm from sysuser where yhm=? and mm=?";
          PrepStmt=conn.prepareStatement(selectStatement);
          PrepStmt.setString(1,username);
          PrepStmt.setString(2,password);
          rs=PrepStmt.executeQuery();
          if (rs.next()){
            user=new String(username);
          }
          }catch(Exception e){e.printStackTrace();}
        return user;
      }   public ActionForward execute(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response) {
      //  HttpSession session = null;
        String user = null;
        String target = new String("success");
              String username = ((LoginForm)form).getUsername();
              String password = ((LoginForm)form).getPassword();
        user = checkUser(username, password);
        if ( user == null ) {
          ((LoginForm)form).setUsername("username");
          ((LoginForm)form).setPassword("password");
          target = new String("failure");
        }
        else {
    //     session=request.getSession();
    //      session.setAttribute("userName",username)
          request.setAttribute("USER", user);
        }
              return (mapping.findForward(target));
    }
    }
    在这段代码中我想用session限制用户必须经过login.jsp才能登录到index.jsp,可是我把注释去掉的时候会出错,编译通不过,请问这是为什么?还有一个问题request.setAttribute("USER", user);
    这一句的作用是什么?
      

  5.   

    1 编译通不过,大概你没有引入javax.servlet.http.HttpSession 这个包
    2 request.setAttribute("USER", user);是指在request这个域里建立一个变量名为USER,值为user
      一般JSP页面里有4个域page,request,session,application,它们的作用范围是
      page<request<session<application
      

  6.   

    谢谢你swiminthesea(发展才是硬道理)。加入javax.servlet.http.HttpSession 后编译就可以通过了。request.setAttribute("USER", user);后在jsp 文件中就可以访问user了,请问在jsp 文件中应该如何写代码访问它呢?还有一个问题就是在一个WEB项目中,我有多处要用到请求响应的模式,例如我不光在登录时用到form,action,当一个用户登录进去后还有好多地方和这个类似,我是不是每一个地方都用一对form,action呢?否则我应该怎么做!多谢谢了!
      

  7.   

    1 在JSP页面里可以通过USER user=(USER)request.getArrtibute("USER");来进行访问
    (USER)是你的user所属的类
    2 在struts1.1以后里面有动态的form,你可以研究一下,就不用每次写很多FORM3 至于Action,也有一个DispatchAction什么的,用于减少Action数量 你可以查一下这方面资料
      

  8.   

    结束吧,谢谢各位了!特别是 swiminthesea的帮助。我是用SESSION来做的。session.getAttribute("userName")!