Servlet类编写好后,想要被访问到,就需要配置其访问路径(urlPattern)
一个Servlet可以配置多个urlPattern:
@WebServlet(urlPatterns={"/demo","/demo2"})
配置路径:@WebServlet("/user/select")
访问路径:localhost:8080/web/user/select
配置路径:@WebServlet("/user/ * ")
访问路径:localhost:8080/web/user/aaa
localhost:8080/web/user/bbb
配置路径:@WebServlet(" * . do ")
访问路径:localhost:8080/web-demo/a.do
localhost:8080/web-demo/b.do
配置路径:@WebServlet("/")
@WebServlet("/ * ")
访问路径:localhost:8080/web-demo/hehe
localhost:8080/web-demo/haha
/ 和 /* 的区别:
当我们的项⽬中的Servlet配置了 "/",会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会⾛这个Servlet当我们的项⽬中配置了"/*",意味着匹配任意访问路径DefaultServlet是⽤来处理静态资源,如果配置了"/"会把默认的覆盖掉,就会引发请求静态资源的时候没有⾛默认的⽽是⾛了⾃定义的Servlet类,最终导致静态资源不能被访问
请求对象和响应对象。
使用Servlet时见过的:
request:获取请求数据
response:设置响应数据
ServletRequest 和 HttpServletRequest是继承关系,并且两个都是接口,无法创建对象,那么service和doGet这些方法参数中的对象是由谁创建的呢?——>RequestFacade:这个类实现了HttpServletRequest接口,也间接实现了ServletRequest接口。
GET请求在Tomcat8.0以后的版本就不会出现了
POST请求的解决方案是:设置输入流的编码
request.setCharacterEncoding("UTF-8");
通用方式(GET / POST):需要先解码,再编码
new String(username.getBytes("ISO-8859-1"),"UTF-8");
请求转发(forward):一种再服务器内部的资源跳转方式
请求转发的实现⽅式:req.getRequestDispatcher("资源B路径").forward(req,resp);
@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("demo5...");
//在RequestDemo5的doGet方法中进行请求转发
request.getRequestDispatcher("/req6").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}