请求如何与Servlet对应
通过前面学习,已初步了解Web容器工作过程以及Servlet的生命周期。但是请求如何与Servlet对应?
方法A:使用标注
标注?
即上图中的 @WebServlet() 标签。从Java EE 6的Servlet 3.0之后推出的功能。用于告诉Web容器如果请求的URI是/random_name,则由Demo的实例提供服务。
@WebServlet("/random_name")
public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter p = response.getWriter();
p.printf("<h1>hello world</h1>");
}
}
当URI是/random_name时,则响应“Hello world”。
换个标签再试一次!
@WebServlet("/change")
方法B:配置web.xml文件
在Serlvet 3.0没有标注之前,只能通过配置web.xml文件设置对应的Servlet对象。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>home.Demo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/random</url-pattern>
</servlet-mapping>
</web-app>
如上述代码所述,配置
两对标签,可以绑定URI与对应的servlet。
先看下效果,在解读web.xml文件对应的标签。
对比两对标签可以发现,都有servlet-name,且两个值相同。中间的名字可以任意,但需要记住两个值必须相同。
第一对标签里内容。
servlet-class设置对应的servlet实例名称。这个值不是任取的,必须与自己已定义的servlet相对应,且注意包名。如下所示:
第二对标签里内容:
url-pattern标签设置url路径名,值可以任取。
通过上述分析,是否觉得有种映射的感觉?