目录
1.2 配置load-on-startup标签后servlet生命周期:
1.1 实现Servlet方式二_自定义类继承GenericServlet
1.2 实现Servlet方式三_自定义类继承HttpServlet(掌握)
1.3 实现Servlet方式三_自定义类继承HttpServlet 流程
7.2 目录匹配:/user/* 只要访问以/user开始的的路径都可以访问
7.3 后缀名匹配:*.do *.action 注意这里不能书写/ 访问以.do或者.action结尾的资源路径,后缀名都属于标识符
7.4 缺省路径:/ 如果上述三种路径都不满足就访问缺省路径。
12、关于servlet3.0注解开发的疑问_配置路径省略了属性urlPatterns
创建web项目,新建普通项目,右键项目名点击add Fram...,勾选Web点ok;
一、Servlet
1、servlet介绍
- Servlet是一个接口,即规范
- 定义的实现类必须实现接口中的所有的抽象方法
- Servlet全称Server Applet 服务器端的程序。是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态web资源。其实servlet的实质就是java代码,通过java的API动态的向客户端输出内容,并且从客户端接收数据。
- 一个类要想通过浏览器被访问到,那么这个类就必须直接或间接的实现Servlet接口
2、servlet作用
- 接收客户端的请求
- 处理业务逻辑
- 响应给浏览器客户端
1.3 servlet入门
1.创建web项目
2.在创建的web项目中自定义类实现Servlet接口
public class servlet入门 implements Servlet{
...重写方法
}
3.在自定义类中实现Servlet接口中的所有的抽象方法
4.在实现Servlet接口的service方法体中书写代码处理业务逻辑
void service(ServletRequest req, ServletResponse res)
5.在web项目的核心配置文件web.xml中配置访问servlet的路径。
说明:这样配置是告知tomcat有具体的Servlet类需要被访问。
6.启动tomcat
7.在浏览器中访问servlet类
若@WebServlet注解无法使用,去tomcat包中把lservlet-api.jar 拷贝到项目的lib下add即可。
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--告知tomcat以下类要被浏览器客户端访问-->
<!--servlet 标签中配置要被访问的具体类,tomcat底层拿到具体的类全路径,然后通过反射技术,调用该
类中的默认无参构造方法创建对象:
Class clazz = class.forName("hhy.servlet入门");
clazz.newInstance(); 调用该类中的默认无参构造方法创建对象-->
<servlet>
<!--随便定义,但在当前web.xml文件中必须唯一-->
<servlet-name>hellowServlet</servlet-name>
<!--
1.这里配置要被访问类的全路径:包名.类名 右键类名copy r...
-->
<servlet-class>hhy.servlet入门</servlet-class>
</servlet>
<!--
1.servlet-mapping :配置浏览器地址栏访问的虚拟路径和上面的类的之间映射关系
-->
<servlet-mapping>
<!--该文本中必须和上述servlet标签中的 <servlet-name>文本值一致-->
<servlet-name>hellowServlet</servlet-name>
<!--浏览器访问该类的虚拟路径,这里在按照如下写-->
<url-pattern>/hello </url-pattern>
</servlet-mapping>
</web-app>
测试:
//2.在创建的web项目中自定义类实现Servlet接口
public class servlet入门 implements Servlet{
//3.在自定义类中实现Servlet接口中的所有的抽象方法
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//4.在实现Servlet接口的service方法体中书写代码处理业务逻辑
System.out.println("hello Servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
启动tomcat, 访问路径http://localhost:8080/hello(hello为web.xml中配置的),控制台打印service方法中的值。
3、Servlet的执行原理
1.1 执行流程:
1.2 执行原理
说明:
- 当点击run运行的时候,tomcat之所以会启动,是因为程序入口(main方法)在tomcat中
- tomcat开始运行,会加载web项目里面的配置文件web.xml(xml解析,读取数据),要是根据url-pattern(设置的路径) 找到对应的servlet-class
- 然后tomcat进入等待状态(永不停止,除非手动关闭)
- 当用户在浏览器中输入地址:http://localhost:8080/hello就会定位到tomcat的访问的项目下面的某个servlet中
- tomcat会根据 /hello 的servlet的虚拟路径 找到HelloServlet的全限定名
- tomcat底层通过反射创建HelloServlet的对象,并调用HelloServlet的service方法:
Class clazz = Class.forName("全限定名");
Servlet servlet = clazz.newInstance();//实际上HelloServlet对象,向上转型
servlet.service();
4、servlet生命周期
指一个对象从生(创建)到死(销毁)的一个过程
1.1 生命周期的api
// 1. servlet对象创建完毕,使用对象调用此方法,初始化方法,只有在第一次访问的时候执行一次
public void init(ServletConfig servletConfig);
// 2. 用户访问servlet时,调用此方法 (每次访问都会调用一次)
public void service(ServletRequest servletRequest, ServletResponse servletResponse);
// 3. servlet对象销毁时,调用此方法
public void destroy();
1.2 Servlet生命周期的api执行时机图解
反射调用无参构造方法创建对象
public class servlet入门 implements Servlet{
//反射根据w