目录文件:
ErrorSservlet.java代码:
package top.klxy.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @Author: SmallWang
* @Date: 2020/7/19 0019 21:07
* @Version: 1.0
*/
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.print("<h1>404页面错误!!</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
HelloServlet.java代码:
package top.klxy.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: SmallWang
* @Date: 2020/7/19 0019 19:40
* @Version: 1.0
*/
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入了doget方法!");
// ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer = resp.getWriter(); //响应流
writer.print("Hello Servlet!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
1. 一个servlet能指定一个路径(一对一)
<!--注册servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>top.klxy.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
开启服务,浏览器输入地址:http://localhost:8081/s1/hello
2. 一个servlet可以指定多个路径(一对多)
<!--注册servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>top.klxy.servlet.HelloServlet</servlet-class>
</servlet>
<!--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>
开启服务,输入地址:
http://localhost:8081/s1/hello
http://localhost:8081/s1/hello1
http://localhost:8081/s1/hello2
http://localhost:8081/s1/hello3
均能成功运行:
3. 一个servlet可以指定通用路径
<!--注册servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>top.klxy.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
开启服务,浏览器输入地址:http://localhost:8081/s1/hello http://localhost:8081/s1/hello/fasdfadfas http://localhost:8081/s1/hello/123456789
在http://localhost:8081/s1/hello/ 后面随便输入都能访问!!
4. 指定一些后缀或者前缀等等....
自定义后缀 .klxy
<!--注册servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>top.klxy.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.klxy</url-pattern>
</servlet-mapping>
打开服务,浏览器输入地址:http://localhost:8081/s1/asdfa.klxy http://localhost:8081/s1/123.klxy
http://localhost:8081/s1/(任意地址).klxy
注意!注意!注意!
<url-pattern>*.klxy</url-pattern> : * 前面不能加项目映射的路径!!
5. 优先级问题
判断 固定路径和通用路径的优先级
<!--注册servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>top.klxy.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>top.klxy.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
打开服务器,浏览器输入地址:http://localhost:8081/s1/
直接进入通配符写的映射的 路径了!
浏览器输入地址:http://localhost:8081/s1/hello
得出结论:指定了固有的结论优先级越高,如果找不到就会走默认的处理请求