正常的Servlet映射
<!--
1.servlet-name 用于关联映射路径
1.servlet-class 告诉Tomcat要实例化Servlet类的全类名
2.url-pattern URL路径
-->
<servlet>
<servlet-name>Test1</servlet-name>
<servlet-class>com.example.JavaWeb.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test1</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
同一个Servlet可以拥有多个映射路径
但同一个映射路径不能服务多个Servlet
<!--
同一个Servlet可以拥有多个映射路径。但同一个映射路径不能服务多个Servlet
-->
<servlet>
<servlet-name>Test1</servlet-name>
<servlet-class>com.example.JavaWeb.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test1</servlet-name>
<url-pattern>/TestServlet</url-pattern>
<url-pattern>/TestServlet2</url-pattern>
<url-pattern>/TestServlet3</url-pattern>
</servlet-mapping>
这种方法也太麻烦了,注解登场!!
使用注解映射Servlet
@WebServlet("映射地址")注解的方式替代web.xml映射
//注解映射和web.xml不能映射同一个地址
//注解映射和web.xml不能映射同一个地址
//注解映射和web.xml不能映射同一个地址
@WebServlet("/Test1")
public class TestServlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//resp.setContentType("text/html"); 检验默认的响应报文头Content-Type
PrintWriter writer = resp.getWriter();
writer.write("<h1>TestServlet1</h1>");
//如果不是HTML肯定不会正确解析H1标签
}
}
映射路径可以使用通配符
通配符 | 描述 |
---|---|
/ | 所有资源,但不包括jsp文件 |
/* | 所有资源,包括jsp文件 |
通配符举例 | 描述 |
---|---|
/a/* | 以a开头的所有资源 |
*.a | 以.a为后缀的所有资源 |
测试通配符
TestServlet1
@WebServlet("/*")
public class TestServlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// HttpServletRequest对象是请求报文,HttpServletResponse是响应报文
PrintWriter writer = resp.getWriter();
writer.write("TestServlet1");
}
}
客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/a/b/dasda.html
客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/dddddd.css
响应报文补充
在Http文章,提及过响应报文头Content-Type
- Content-Type
- 响应报文主体的数据类型(浏览器根据该类型进行对应的解析)
栗子
请求服务器内finger.jpg
至此,在编写Servlet中,应该正确的编写响应报文头Content-Type与其值。
Content-Type与其值
如果不编写Content-Type。默认值为:(并且指定编码UTF-8)
Content-Type: text/html; charset=utf-8
校验默认的Content-Type
TestServlet1
@WebServlet("/Test1")
public class TestServlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//resp.setContentType("text/html"); 检验默认的响应报文头Content-Type
PrintWriter writer = resp.getWriter();
writer.write("<h1>TestServlet1</h1>");
//如果不是HTML肯定不会正确解析H1标签
}
}
标签:Java,映射,TestServlet1,Servlet,resp,Content,Type,报文
From: https://www.cnblogs.com/Ocraft/p/17920174.html