jsp、servlet、form表单提交过程中的地址(相对和绝对)

时间:2024-03-29 14:06:54

今天终于理解这个地址的问题,对于jsp页面或者是servlet中的相对地址和绝对地址,这里我需要说的几点:

首先对于相对地址来说:

jsp、servlet、form表单提交过程中的地址(相对和绝对)

Jsp页面

我现在有一个项目,名称是shengsiyuan,然后webroot下面有一个文件夹session,session下面有两个jsp页面,一个是index.jsp,还有一个是login.jsp,在index.jsp中需要跳转到这个login.jsp中,这个时候可以使用请求转发或者是重定向,如果是请求转发,那么这个相对地址就会定位到我访问的这个index.jsp(http://localhost:8080/shengsiyuan/session/index.jsp)的根目录localhost:8080/shengsiyuan/session,这个时候我只需要

Request.getRequestDispatcher(“index.jsp”).forward(request,response);//相对地址

 

如果是重定向,那么这个相对地址也会定位到我当前访问这index.jsp(http://localhost:8080/shengsiyuan/session/index.jsp)的根目录localhost:8080/shengsiyuan/session,这个时候我只需要Response.sentRedirect(“index.jsp”);//相对地址

jsp、servlet、form表单提交过程中的地址(相对和绝对)

对于Servlet

还是上面的那么项目,有一个servlet叫UserLoginServlet.java,我新建的这个servlet的时候访问目录是/UerLoginServlet,如下图

jsp、servlet、form表单提交过程中的地址(相对和绝对)

这个时候如果我访问这个UserLoginServlet.java我只需要在地址栏写上

http://localhost:8080/shengsiyuan/UserLoginServlet,就可以访问这个servlet,现在需要在这个servlet中进行请求转发或者重定向,并且使用的是相对路径,如果是请求转发,那么和上面一样,他会定位到我当前访问的这个servlet(http://localhost:8080/shengsiyuan/UserLoginServlet)的根目录localhost:8080/shengsiyuan/,这个时候我只需要:

request.getRequestDispatcher(“session/index.jsp”).forward(request,response);

 

如果是重定向,那么也是会定位到我当前访问的这个servlet(http://localhost:8080/shengsiyuan/UserLoginServlet)的根目录localhost:8080/shengsiyuan/,这个时候我只需要:

Response.sendRedirect(“session/login.jsp”);

jsp、servlet、form表单提交过程中的地址(相对和绝对)

绝对地址,这个就比较和上面的不一样,请求转发和重定向是不一样的。在这里我们这里只讲jsp页面中,然后如果是在servlet,原理是一样的,就看怎么定位到哪个根。

 

Jsp页面的绝对地址:

还是上面的这个index.jsp,和login.jsp,这个时候如果是从index.jsp请求转发到login.jsp,这个时候定位就不是从index.jsp的这个根目录来定位,而是定位到localhost:8080/shengsiyuan 所以这个时候你就需要

Request.getRequestDispatcher(“/session/login.jsp”).forward(request,response);//绝对路径的请求转发

 

如果是重定向,这个时候也不是从index.jsp这个根目录来定位,卫视定位到整个项目的根目录localhost:8080,所以这个时候你需要

Response.sendRedirect(/shengsiyuan/session/login.jsp);//绝对路径的重定向

jsp、servlet、form表单提交过程中的地址(相对和绝对)

form表单,action里面的路径来说,相对路径和绝对路径也是不一样的,如果写的是相对路径来说,我还是那上面的那个例子来说。在login.jsp中有一个form表单,那么在这个jsp页面没有basePath那么这个时候就会直接会定位到login.jsp的根目录localhost:8080/shengsiyuan/session,所以这个时候要求需要action的地址相对路径是以session开始的,比如我的servlet为

jsp、servlet、form表单提交过程中的地址(相对和绝对)

,这个时候提交后他就会在形成localhost:8080/shengsiyuan/session/UserLoginServlet,显然这样是访问不到这个servlet的,所以这个时候可以动点小脑筋(不可取),这个时候你可以吧web.xml里面访问这个Servlet的路径改了,本来是/UserLoginServlet,改成/session/UserLoginServlet,这个时候就能访问到这个jsp页面,不过这种方法不可取,会让别人很难看懂,还有一种办法,这个不是相当于你要跳出这个session,然后在后面加上UserLoginServlet,这样一来过程就是,先返回上一层,是的定位到的根为8080/shengsiyuan/,然后再加上这个UserLoginServlet,这就需要:

action=””../UserLoginServlet”,其中../表示返回到上一层中,然后在加上UserLoginServlet

 

如果有这个basePath,那么这个时候form表单提交就会定位到localhost:8080/shengsiyuan/,这样提交后就会形成localhost:8080/shengsiyuan/UserLoginServlet这样就能成功访问到,如果是绝对地址这个时候就会定位到localhost:8080所以这个时候你的绝对地址action就需要:

action=””/shengsiyuan/UserLoginServlet.这样就会形成:

localhost:8080”/shengsiyuan/UserLoginServlet