servlet 是java提供的一门动态的web资源开发技术
Servlet是javaEE的规范(规范就是接口),将来需要我们定义Servlet类实现Servlet接口,并有web服务器运行Servlet。
1.创建web项目,导入Servlet依赖坐标
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
dependencies>
2.创建:定义一个类,实现servlet接口,并重写接口中所有方法,并在service方法中输入一句话
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("servlet hello world~");
}
3.配置:在类上使用@WebServlet注解,配置该Servlet访问路径
@WebServlet("/demo1") //这里是当前servlet访问路径
public class ServletDemo1 implements Servlet {
4.访问:启动Tomcat,浏览器输入URL访问Servlet
显示页面是空白,因为我们并没有向页面输出信息,我们的输出内容在控制台里面,这样就说明servlet被成功访问。
http://localhost:8080/web-demo/demo1
http://localhost:8080:访问tomcat服务器
/web-demo:访问对应的web项目
/demo1:访问对应得Servlet页面
1.Servlet对象和对应得方法都是tomcat web服务器创建和调用得
2.服务器怎么知道Servlet中一定有service方法?
因为我们自定的servlet,必须实现Servlet接口并复其方法,而Servlet接口中有service方法。
创建到销毁的过程称为生命周期
servlet生命周期由容器(web服务器)来管理,四个阶段:
加载实例化:默认情况,servlet第一次访问时被创建
@WebServlet(urlPattrens="/demo1",loadOnStartup=1)
0或者正数:服务器启动时创建servlet,数字越小优先级越高
初始化:实例化后容器调用servlet的init方法初始化这个对象(只调用一次),用来加载配置、创建链接等
请求处理:请求Servlet时(访问),容器都会调用Servlet的service方法(提供服务的)对请求处理(会执行很多次)
服务终止:当需要释放内存或者容器被关闭,容器调用servlet的destroy方法,之后该实例会被java垃圾收集器所回收
ServletConfig getSerletConfig()//获取ServeltConfig对象
String getServeltinfo() //获取Servlet信息
我们开发的B/S框架的web项目都是针对HTTP协议,所以我们自定义Servlet,会继承HTTPServlet
@WebServlet("/demo4")
// 子类继承父类的除构造方法和private 的方法的其他东西
public class ServletDemo4 extends HttpServlet { //封装好HTTP协议的Servlet实现类,比implements Servlet(只用到service方法,别的重写还都方法用不到)更简化
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get..."); //通过浏览器地址栏直接访问
}
// post请求在请求体里面,get请求在请求行里面
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post..."); //通过创建一个html(webapp下)
}
}
@WebServlet(urlPattern={"/demo1","/demo2"})
2.配置规则 (/web-demo一开始配置tomcat时设置的上下文路径)
优先级:精确路径>目录路径>扩展名路径>/*>/
精确匹配:@WebServlet(“/user/demo1”)
目录匹配:@WebServlet(“/user/*”) http://localhost:8080/web-demo/user/任意
扩展名匹配:@WebServlet(“*.do”) http://localhost:8080/web-demo/aaa.do aaa.do 前面是什么无所谓
任意匹配:@WebServlet(“/”)(会覆盖tomcat中的DefaultServlet,导致静态资源无法访问,如webaapp下的html) @WebServlet(“/*”) (/*比单纯/优先级高) http://localhost:8080/web-demo/任意
在WEB-INF下的web.xml中配置,但是远远没有注解方式方便,了解一下即可。
<servlet>
<servlet-name>demo13servlet-name>
<servlet-class>com.itheima.web.ServletDemo13servlet-class>
servlet>
<servlet-mapping>
<servlet-name>demo13servlet-name>
<url-pattern>/demo13url-pattern>
servlet-mapping>
第一个写我们刚才起的名字,第二个写该Servlet资源的访问路径-->
<servlet-name>demo13servlet-name>
<url-pattern>/demo13url-pattern>
servlet-mapping>
利用maven骨架快速搭建web项目:
名称和位置自定义:
下一个页面直接下一步。
点击右上角添加配置:
然后再webapp下写页面,去输入网址(http://localhost:8080/web-demo/a.html)运行就可以了