Страница Сервелта не перенаправляет на вторую страницу с помощью сервлета - PullRequest
2 голосов
/ 20 февраля 2020

Я начинающий сервлет jsp. Я создаю простую форму входа, если страница успешного входа перенаправляет на второй сервлет вместе с именем пользователя. но это не работает, это показывает ошибку java .lang.IllegalArgumentException: Второй путь не начинается с символа "/" , что я пытался до сих пор, я прикрепил ниже.

Форма

 <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>

Логин Страница сервлета

@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);  

         }



    }

Вторая страница сервлета

@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);

    }

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Есть некоторые большие различия между redirect и forward. Эта статья поможет вам лучше понять вашу проблему.

Некоторые вещи, которые следует иметь в виду из статьи:

FORWARD

1) Объекты запроса и ответа останутся тем же объектом после пересылки. Объекты области запроса будут по-прежнему доступны (поэтому, если вы попытаетесь добавить "/", вы получите статус 405 - он попытается перенаправить вас на сервлет "/ second", но единственный переопределенный запрос - GET)

REDIRECT

1) Запрос перенаправлен на другой ресурс

2) A создается новый запрос

Поэтому вместо использования rd.forward я бы предложил вам использовать метод sendRedirect() из HttpServletResponse класса.

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

AND правильный способ получения атрибута имени пользователя сеанса таков:

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

В противном случае он попытается найти ключ uname , который установлен , а не . uname было только значением, сопоставленным с username key (session.putValue("username",uname);

0 голосов
/ 20 февраля 2020

это исключение указывает, путь не начинается с "/". вместо этого попробуйте ниже.

 RequestDispatcher rd=context.getRequestDispatcher(request.getContextPath() +"/second"); 
...