先说下我的项目文件放置 项目名:sheji项目里文件夹security和WEB-INFsecurity里的文件是register.jsp(注册页面)提交信息到UserServlet.javaregisterSuccess.jsp(注册成功页面)
问题来了!!运行的时候提交register.jsp的信息给UserServlet.java居然说找不到register.jsp,而将request.getRequestDispatcher("/security/register.jsp").forward(request, response);这句的/security去掉却能提示用户***已经被注册(我事先在数据库中加了一条用户信息,明明register.jsp和registerSuccess.jsp是在registerSuccess.jsp下的),而注册数据库中没有的用户的时候跳转不过来了(跳转显示的是http://localhost:8080/biyesheji/user.do?method=register)空白页,显示不了注册成功,不知道为什么,搞了一下午的!
本来就看起来很简单的,不知道为什么。。
运行了半天有时候会出现this.process提示变量错误。
希望懂的指导下,非常感谢
下面是一些程序片段
UserServlet.java
public class UserServlet extends HttpServlet {    private UserDao userDao = new UserDao();    /**
     * 处理get请求.
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {        this.process(request, response);
    }    /**
     * 处理post请求
     */
    public void doPost(HttpServletRequest request,HttpServletResponse response)
        throws ServletException, IOException {        this.process(request, response);
    }
    public void process(HttpServletRequest request,HttpServletResponse response)
        throws ServletException, IOException {        String method = request.getParameter("method");
        if(method==null){
          return; 
        }
        
        try {
            // 分发请求
            if ("register".equals(method)) {
                this.register(request, response);
            } 
        } catch(Exception ex) {
            System.err.println(ex);
            ex.printStackTrace();
        }
    }    /**
     * 注册新用户.
     */
    public void register(HttpServletRequest request,HttpServletResponse response) throws Exception {
        String username = request.getParameter("username");
        String password = request.getParameter("password");        boolean userExists = userDao.checkExists(username);
        if (userExists) {
            request.setAttribute("error", "用户名:" + username + "已被使用了,请更换其他用户名注册。");
            request.getRequestDispatcher("/security/register.jsp").forward(request, response);
        } else {
            UserBean userbean = new UserBean();
            userbean.setUsername(username);
            userbean.setPassword(password);            userDao.save(userbean);
            response.sendRedirect(request.getContextPath()+"/security/registerSuccess.jsp");
        }
    }UserDao.javapublic void save(UserBean userbean) throws Exception  {
        Connection conn = null;
        PreparedStatement state = null;        try {
            conn = DbUtils.getConn();
            state = conn.prepareStatement("insert into userguanli(username,password) values(?,?)");
            state.setString(1, userbean.getUsername());
            state.setString(2, userbean.getPassword());
            
            state.executeUpdate();
        } finally {
            DbUtils.close(null, state, conn);
        }
    }
       // ==
    public boolean checkExists(String username) throws Exception {
        Connection conn = null;
        PreparedStatement state = null;
        ResultSet rs = null;        boolean userExists = false;
        try {
            conn = DbUtils.getConn();
            state = conn.prepareStatement("select id from userguanli where username=?");
            state.setString(1, username);
            rs = state.executeQuery();            if (rs.next()) {
                userExists = true;            }
        } finally {
            DbUtils.close(rs, state, conn);
        }
        return userExists;
    }

解决方案 »

  1.   

    request.getContextPath()直接得到当前客户端的页面程序的路径,应该不能用文件夹,可以用getServletContext()返回Servlet的上下文对象的引用
      

  2.   

    UserServlet.java和registerSuccess.jsp 跟 register.jsp 都在 security文件夹下吧?
    如果是那样,相对路径中自然就不需要些/security了啊
      

  3.   

    UserServlet.java是在WEB-INF下的src文件夹下的web文件夹里, registerSuccess.jsp 跟 register.jsp 都在 security文件夹下。
    但是另外个别人的项目,也是那么写的。为什么能运行过去呢???我的就不行
      

  4.   

    servlet.getContextPath() + url ,你这样试试相对路径,有时候会比较头疼,所以建议拼凑成绝对路径
      

  5.   

    项目路径如下
    tomcat根目录/sheji/(文件夹security,文件夹WEB-INF)/security下有registerSuccess.jsp 跟 register.jspWEB-INF下有src文件夹(各有文件夹分别存java程序)
    哎,不管怎么弄只能跳转到用户重复则提示却不能跳转到提示成功,也不能保存注册信息
      

  6.   

    server2000里为每行数据加一个ID,怎么让每次调用保存注册信息方法的时候,让它自动加1?
    我感觉是因为这个原因,所以才出现上面问的问题
      

  7.   

    // == 
        public boolean checkExists(String username) throws Exception { ///觉得最好把 password 也传进来,
            Connection conn = null; 
            PreparedStatement state = null; 
            ResultSet rs = null;         boolean userExists = false; 
            try { 
                conn = DbUtils.getConn(); 
                state = conn.prepareStatement("select id , password from userguanli where username=?"); 
                state.setString(1, username); 
                rs = state.executeQuery();             if (rs.next()) { 
    sysout.. rs.getString("id"); // 
    if(password.equals(rs.getString("passord")
                    userExists = true;             } 
            } finally { 
                DbUtils.close(rs, state, conn); 
            } 
            return userExists; 
        }你看下 id 是多少, 觉得这里出了问题,但不知道是什么问题, 你最好也把 userName打印出来