Servlet_path和Page_info的区别

<servlet-mapping>
    <servlet-name>RedServlet</servlet-name>
    <url-pattern>/red/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RedServlet</servlet-name>
    <url-pattern>/red/red/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RedBlueServlet</servlet-name>
    <url-pattern>/red/blue/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>BlueServlet</servlet-name>
    <url-pattern>/blue/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>GreenServlet</servlet-name>
    <url-pattern>/green</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ColorServlet</servlet-name>
    <url-pattern>*.col</url-pattern>
</servlet-mapping>
Request URI                Servlet Used            Servlet Path        Path Info  
/colorapp/red                RedServlet              /red                 null  
/colorapp/red/               RedServlet              /red                 /  
/colorapp/red/aaa            RedServlet              /red                 /aaa  
/colorapp/red/blue/aa        RedBlueServlet          /red/blue            /aa  
/colorapp/red/red/aaa        RedServlet              /red/red             /aaa  
/colorapp/aa.col             ColorServlet            /aa.col              null  
/colorapp/hello/aa.col       ColorServlet            /hello/aa.col        null  
/colorapp/red/aa.col         RedServlet              /red                 /aa.col  
/colorapp/blue               NONE(Error message)                           
/colorapp/hello/blue/        NONE(Error message)                           
/colorapp/blue/mydir         NONE(Error message)      
/colorapp/blue/dir/aa.col    ColorServlet            /blue/dir/aa.col     null   
/colorapp/green              GreenServlet            /green               null  

[Servlet 规范中描述]

映射请求到Servlet
接收到一个请求后,WEB容器要确定转到哪一个WEB应用程序。被选择的应用程序的最长的上下文路径必须和请求的URL开始部分匹配。URL匹配的部分是映射到Servlet的上下文路径。
WEB容器下一步必须按照下面的程序定位处理请求的Servlet。
用来映射到Servlet的路径是请求对象的URL减去上下文的路径。下面的URL路径映射规则按顺序执行,容器选择第一个成功的匹配并且不在进行下一个匹配:
Ø 容器试着对请求的路径和Servlet的路径进行精确匹配,如果匹配成功则选择这个Servlet。
Ø 容器会循环的去试着匹配最长的路径前缀:把’/’当作路径分隔符,按照路径树逐级递减的完成,选择最长匹配的Servlet。
Ø 如果这个URL路径的最后有扩展名(比如.jsp),Servlet容器会试着匹配处理这个扩展名的Servlet。
Ø 如果前面的没有与前面三条规则相匹配的Servlet,容器会试着为资源请求提供适当的资源,如果有“默认”的Servlet定义给这个应用程序,那么这个Servlet会被使用。

容器必须使用一个大小写敏感的匹配方式。
在部署描述符中,用下面的语法定义映射:
Ø 一个以’/’开始并且以’/*’结束的字符串用来映射路径。
Ø 一个以’*.’为前缀的字符串用来映射扩展名。
Ø 一个只包含’/’的字符串指示着这个应用程序“默认”的Servlet,在这种情况下,servlet的路径是请求的URI减去上下文路径,并且这个路径是null。
Ø 所有其他的字符只用来精确匹配。
如果容器内置JSP容器,那么.jsp被映射到这个容器,并允许JSP页面在需要的时候被执行。这种映射叫做隐含映射。如果WEB应用程序中定义了.jsp的映射,那么这个映射有比隐含映射高的优先级。
WEB容器允许显式的声明隐含映射以获得优先级,例如,*.shtml的隐含映射可以在服务器上被映射为包含功能。

下面是一个使用Servlet和JSP实现用户注册功能的示例代码: 1. 创建一个名为RegisterServlet的Java Servlet,用于处理用户提交的注册请求。 ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/register") public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户提交的注册信息 String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); // TODO: 对用户提交的信息进行验证,并保存到数据库中 // 跳转到注册成功页面 request.getRequestDispatcher("/register_success.jsp").forward(request, response); } } ``` 2. 创建一个名为register.jsp的JSP页面,用于显示用户注册表单,并将用户填写的表单数据提交到RegisterServlet处理。 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form action="${pageContext.request.contextPath}/register" method="post"> <p> <label>用户名:</label> <input type="text" name="username" required> </p> <p> <label>密码:</label> <input type="password" name="password" required> </p> <p> <label>邮箱:</label> <input type="email" name="email" required> </p> <p> <button type="submit">注册</button> </p> </form> </body> </html> ``` 3. 创建一个名为register_success.jsp的JSP页面,用于显示用户注册成功信息。 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h1>用户注册成功!</h1> <p>感谢您注册我们的网站。</p> </body> </html> ``` 这样,当用户访问/register页面时,会显示用户注册表单。用户填写并提交表单后,RegisterServlet会处理用户提交的注册请求,并将用户信息保存到数据库中。最后,跳转到register_success.jsp页面,显示注册成功信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值