首页 > 解决方案 > Servelt 页面不使用 Servlet 重定向到第二个页面

问题描述

我是 servlet jsp 的初学者。如果登录成功页面与用户名一起重定向到第二个 servlet,我将创建一个简单的登录表单。但它不起作用,它显示错误java.lang.IllegalArgumentException: Path second does not start with a "/" character 我到目前为止尝试过的我附在下面。

形式

 <div class="row">
                <form method="POST" action="login">
                <div class="form-group">
                    <label>Username</label>
                    <input type="text" id="uname" name="uname" placeholder="uname" class="form-control"> 
                </div>

                 <div class="form-group">
                    <label>Password</label>
                    <input type="password" id="pword" name="pword" placeholder="pword" class="form-control">

                </div>


                 <div class="form-group">


                     <input type="submit" value="submit" class="btn btn-success">

                </div>

                </form>


            </div>

登录Servlet 页面

@WebServlet("/login")
public class login extends HttpServlet {
  @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
    {

         String uname = request.getParameter("uname");
         String pass = request.getParameter("pword");

         if(uname.equals("John") && pass.equals("123"))
         {
            PrintWriter out = response.getWriter();
            HttpSession session = request.getSession(true); 
            session.putValue("username", uname);

            ServletContext context=getServletContext();
            RequestDispatcher rd=context.getRequestDispatcher("second");  

            rd.forward(request, response);  

         }



    }

第二个 Servlet 页面

@WebServlet("/second")
public class second extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
    {
        PrintWriter out = response.getWriter();
         HttpSession session = request.getSession(true);
       String uname = (String)session.getValue("uname");
        out.println("User Name is " + uname);

    }

标签: javajspservlet-3.0

解决方案


redirect和之间有一些很大的区别forward本文将帮助您更好地理解您的问题。

文章中要记住的一些事情:

向前

1)请求和响应对象在转发后将保持相同的对象。请求范围的对象仍然可用(这就是为什么如果您尝试添加“/”会得到 405 状态 - 它会尝试将您转发到“/second” servlet,但唯一被覆盖的请求是GET

重定向

1)请求被重定向到不同的资源

2)创建一个新的请求

因此,rd.forward我建议您使用类中的sendRedirect()方法,而不是使用HttpServletResponse

response.sendRedirect(request.getContextPath() + "/second");

并且获取会话用户名属性的正确方法是:

String uname = (String) session.getValue("username");

否则它将尝试照顾设置的uname键。这只是一个映射到用户名键的值(unamesession.putValue("username",uname);


推荐阅读