Java登陆第二十七天——多种方法Servlet映射、Content-Type

发布时间 2023-12-21 21:35:04作者: ocraft

正常的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
image

客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/dddddd.css
image

响应报文补充

Http文章,提及过响应报文头Content-Type

  • Content-Type
    • 响应报文主体的数据类型(浏览器根据该类型进行对应的解析)

image

栗子

请求服务器内finger.jpg
image

至此,在编写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标签
    }
}

image