Mapping问题
Servlet接口,这里我们直接继承HttpServlet类。
package com.edwin.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//此处再子项目中,是没有这个依赖的,但是在父项目中有这个依赖,可以直接用。
/**
* @author Edwin D
* @date 2020.5.31 下午 10:38
*/
public class HelloServlet extends HttpServlet {
// 由于get或者post只是请求实现的不同方式,可以相互调用,业务逻辑都一样。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ServletOutputStream outputStream = resp.getOutputStream();
// 响应流。
PrintWriter writer = resp.getWriter();
writer.println("Hello,World!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.一个Servlet可以指定一个映射路径
<-- 在web.xml 中-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
输出入上上图所示:
2.一个Servlet可以指定多个映射路径
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello4</url-pattern>
</servlet-mapping>
效果同上:
3.一个Servlet可以指定通用映射路径
/Hello/*: 在Hello/后面接上任何的字符,都可以运行处同一个结果:
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello/*</url-pattern>
</servlet-mapping>
效果同上:
4.默认请求路径
<!--默认请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5.指定后缀前缀等问题。
<!--可以自定义后缀实现请求映射
注意点:*前面不能加项目映射的路径
hel1o/sajd1kajda.edwin-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>*.edwin</url-pattern>
</servlet-mapping>
进入:
更改后:
6.优先级问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
输入Hello后:
<!--404-->
<servlet>
<servlet-name>Error</servlet-name>
<servlet-class>com.edwin.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
参考文献
《【狂神说Java】JavaWeb入门到实战》
2020.06.01