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

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

首先对于相对地址来说:


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”);//相对地址

对于Servlet

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

这个时候如果我访问这个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,原理是一样的,就看怎么定位到哪个根。

 

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);//绝对路径的重定向


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

,这个时候提交后他就会在形成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


好的,这里是一个简单的JSPServlet实现的表单保存Demo: index.jsp页面: ```jsp <!DOCTYPE html> <html> <head> <title>表单</title> </head> <body> <h1>表单</h1> <form action="save" method="post"> <label>姓名:</label> <input type="text" name="name"><br> <label>性别:</label> <input type="radio" name="gender" value="male">男 <input type="radio" name="gender" value="female">女<br> <label>年龄:</label> <input type="number" name="age"><br> <input type="submit" value="提交"> </form> </body> </html> ``` 这个页面包含一个表单,表单的提交地址是`save`,其包含了姓名、性别和年龄三个字段。 SaveServlet.java: ```java package com.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SaveServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String gender = request.getParameter("gender"); int age = Integer.parseInt(request.getParameter("age")); // 将数据保存到数据库或文件 // ... // 返回成功信息 response.getWriter().println("保存成功"); } } ``` 这是一个Servlet类,它继承自HttpServlet类,重写了doPost()方法。当表单提交时,表单数据会被封装到HttpServletRequest对象,通过request.getParameter()方法可以获取表单字段的值。在这个例子,我们获取了姓名、性别和年龄三个字段的值,然后可以将它们保存到数据库或文件。 需要注意的是,在实际的应用,我们应该将数据库操作放到DAO层,而不是直接在Servlet操作数据库。 在web.xml需要配置SaveServlet的映射关系: ```xml <servlet> <servlet-name>SaveServlet</servlet-name> <servlet-class>com.example.SaveServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SaveServlet</servlet-name> <url-pattern>/save</url-pattern> </servlet-mapping> ``` 这个配置的意思是,当用户请求`/save`地址时,会将请求交给名为`SaveServlet`的Servlet进行处理。 这样,我们就完成了一个简单的表单保存Demo。当我们提交表单时,表单数据会被提交到SaveServlet,SaveServlet可以将数据保存到数据库或文件
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值