您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
03_Servlet_urlpartten配置
发布时间:2022-08-07 12:18:46编辑:雪饮阅读()
多路径注解与doGet
webservlet注解支持多个路径的注解;若一个类继承了HttpServlet则不用实现之前实现servlet接口时要实现的那么多方法(包含生命周期),一般的最简单的只需要覆写doGet方法即可(同样是可选,但这里为了能输出到控制台,还是覆写下好)。应该是采用了类似适配器的模式吧。
demo1.java如:
package day13;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"/demo3","/demo4"})
public class demo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("/demo3和/demo4被访问");
}
}
目录式路径
除了能配置最简单的路径,也支持按目录的方式配置访问路径,如:
demo1.java:
package day13;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"/demo3/demo4"})
public class demo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("/demo3/demo4被访问");
}
}
通配符式路径
像上面只能访问到/demo3/demo4,那么假如我要访问/demo3/demo4下面的任意路径呢?
则上述的就不行了。
应该用通配符*
如demo1.java:
package day13;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"/demo3/demo4/*"})
public class demo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("/demo3/demo4/*被访问");
}
}
顶级通配符
上面的*通配符仅仅在非顶级(这里的顶级是指项目路径根路径),那么如果要当前项目的整个项目都用通配符访问,其实也简单。
demo1.java:
package day13;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"/*"})
public class demo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("/*被访问");
}
}
通配符优先级
这个url注解不仅仅限制于存在于单个类上,多个类上也是可以的。
比如上面这个是demo1.java通配顶级路径,那么接下来我再来一个demo2.java仅仅通配/demo3:
package day13;
import com.sun.net.httpserver.HttpServer;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"/demo3"})
public class demo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我是demo2.java的doGet方法");
}
}
那么当访问项目下的/demo3路径时候应该是访问的demo2.java中的对应方法(如doGet)
因为*通配符优先级是低于比它更精确的通配级别的优先级的。
按后缀的通配符
还有一种通配符是*.do通配符,该通配符前面不能有“/”,并且访问时候url应如:
http://localhost:8080/untitled3_war_exploded/kasumi.do
这里kasumi就是*所通配的
则有如demo2.java:
package day13;
import com.sun.net.httpserver.HttpServer;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet({"*.do"})
public class demo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我是demo2.java的doGet方法");
}
}
而且这种通配符好像是有点低于/*通配符,哥亲测。
关键字词:Servlet,urlpartten
上一篇:16_IDEA与tomcat相关配置(intellij idea与tomcat的配置同步及intellij idea对tomcat进行debug断点调试)
下一篇:05_HTTP_请求消息_请求行