jsp-servlet 的相关请求路径问题 —url

jsp-servlet 的相关请求路径问题  —url

 


 

本文章主要解决的几方面问题如下:

  1. 常见涉及路径元素;
  2. jsp页面请求和servlet请求转发、重定向的关系
  3. 如何避免下一步请求受上一步请求在URL方面的问题

常见涉及路径元素:

  1. 表单中的action属性 ,其值是提交表单的请求。action中指向的路径与最终请求的页面或servlet关系不大,比如可以指向html页面,可以指向jsp页面(当然,从某方面来讲,两者是一样的,也可以写serlet的urlPatterns指定的位置。)
  2. 重定向。先看代码
    response.sendRedirect("Jsp/Login.jsp");

    此处的重定向实现的是:让服务器对客户端进行响应,并让客户端对project_name/jsp/Login.jsp页面重新请求。显示的url为新的请求的url

  3. 请求转发。先看代码
    request.getRequestDispatcher("Jsp/Home.jsp").forward(request, response);

    此处的请求转发实现的是将请求转发到project_name/jsp/Login.jsp页面.显示的url是该servlet的url,即可以看出在servlet中进行了处理

jsp页面请求和servlet请求转发、重定向的关系:

表单请求会携带表单信息,其中get方式信息在url中,post方式是在请求体当中。而在开发工作中,经常会在servlet中进行获取,根据信息判断进行相应的处理,之后再来进行请求或转发。典型的代表就是登陆表单的验证,密码正确转发到下一步,密码错误重定向到登录界面。

 

如何避免下一步请求受上一步请求在URL方面的问题:

假如在servlet的注解为

@WebServlet(name = "LoginServlet", urlPatterns = "/LoginServlet")
public class LoginServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.getWriter().append("Served at: ").append(request.getContextPath());

if ("密码正确的代码") {
request.getRequestDispatcher("Jsp/Home.jsp").forward(request, response);
} else {
response.sendRedirect("Jsp/Login.jsp");
}
}

表单action为 

action="LoginServlet"

那么在第一次就密码正确可以登录,可是第一次错了重新输入后登录就吹出现路径问题

原因是重定向后客户端发出的请求与正确的servlet 的urlPatterns值不一致。解决办法就是将表单的请求从根目录开始,即

action="/Personal_name/LoginServlet"

备注:

  1.  路径中默认的是 ./ 表示当前目录

  2.  ../表示上一级目录
  3.  / 表示根目录 
原文地址:https://www.cnblogs.com/StevenZheng/p/10700705.html