文章目录
总结
总结就是要放前面,任性。
总结一下,Servlet就是一个服务器端的小程序,他有五个方法,分别是init,ServletConfig,service,getServletInfo,destroy,分别代表什么,忘记了下边去找。还有Servlet的生命周期也比较重要,目前的理解是Servlet相当于一个桥梁,用来连接前端和后端,把前端的得到的一些数据交给后端,比如页面表单里的一些name,password什么的,
那么如何获取,如何使用Servlet呢,就要创建一个类来实现Servlet接口,但是常用的方法就是service方法,只用一个,却要实现全部方法很麻烦,于是就有了GenericServlet抽象类,它内部把Servlet除了service的另外四个类都做了默认空实现,只将service()方法作为抽象,这样继承GenericServlet抽象类就相当于只用重写Servlet的service方法了,
但是html提交表单时,有GET或者POST两种方法,这时候,在GenericServlet中就要做判断了,因为这个判断过程是重复代码,以后每个都要做,所以为了方便,就有了HttpServlet,不过HTTP有七种请求方式,所以里面有七个方法,但是常用的就是GET和POST,所以只关注这两个就好了
浏览器直接请求是GET方式,目前只能通过表单里面的method设置进行POST提交,当然也可以设置为GET提交
所以以后创建Servlet,尽量继承HttpServlet,然后重写doGet/doPost方法
IDEA中的HttpServlet里有两个service,里面的参数是Request req,工具的强大之处吧,也是我第一次去看源码,特意记一下,啊哈哈哈
Servlet
一、概念:
运行在服务器端的小程序
* Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则。
* 将来我们自己定义一个类,实现Servlet接口,复写方法。
资料拓展:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式的浏览和生成数据,生成动态Web内容。
二、步骤:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
* public class ServletDem01 implements Servlet
3. 实现接口中的抽象方法
4. 配置Servlet
<!-- 配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.vito.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
三、执行原理
- 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- 查找web.xml文件,是否有对应的标签体内容。
- 如果有,则在找到对应的全类名
- tomcat会将字节码文件加载进内存,并且创建其对象
- 调用其方法
四、Servlet的生命周期
Servlet的生命周期是指servlet从加载、初始化、服务到销毁的一个过程,也就是Servlet的出生到结束。而Servlet是JavaWeb开发的核心。简单的说Tomcat等JavaWeb服务器都是以实现Servlet标准为基础进行编写的,这就决定了Servlet在JavaWeb开发中的地位。
对于Servlet需要了解的是,servlet是JavaWeb应用的基础,很多框架都是封装servlet实现的,而servlet的生命周期全部由Web容器来控制,初始化、服务、销毁,这三个用户可以自己去添加内容,然后由Web容器进行调用。
五、Servlet中的五个方法
//初始化方法,在Servlet被创建时,执行。只执行一次。
public void init(ServletConfig servletConfig) throws ServletException {}
//获取ServletConfig对象,ServletConfig:Servlet的配置对象
public ServletConfig getServletConfig(){ return null; }
//提供服务方法,每一次Servlet被访问时,执行。执行多次
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}
//获取Servlet的一些信息,版本、作者.......
public String getServletInfo() { return null; }
//销毁方法,在服务器正常关闭时执行,执行一次。
public void destroy() {}
方法名称 | 功能描述 |
---|---|
void init (ServletConfig config) | 由Servlet 容器调用,用于完成Servlet对象在处理客户请求前的初始化工作 |
void service (ServletRequest req,ServletResponse res) | 由Servlet 容器调用,用来处理客户端的请求 |
void destroy ( ) | 由 Servlet 容器调用,释放Servlet对象所使用的资源 |
ServletConfig getServletConfig ( ) | 返回ServletConfig 对象,该对象包含此 Servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init( )方法的对象 |
String getServletInfo ( ) | 返回有关Servlet 的信息,比如作者、版本和版权。返回的字符串是纯文本,而不是任何种类的标记如 HTML、XML等 |
- 被创建:执行init方法,只执行一次
- Servlet什么时候被创建?
- 默认情况下,第一次访问时,Servlet被创建
- 可以配置指定Servlet的创建时机。
- 为什么要指定它的创建时机——> 因为有的Servlet它需要加载的方法比较多,它执行之前需要依赖别的Servlet的资源加载,我们可以让别的Servlet在服务器启动就创建。
- 在标签下配置
- 第一次被访问时,创建(默认)
- 的值为负数
- 在服务器启动时,创建(需要时,进行配置,可以加载别的Servlet资源)
- 的值为正整数或者0
- 第一次被访问时,创建(默认)
- Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
- 多个用户同时访问时,可能存在线程安全问题。
- 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要修改值
- Servlet什么时候被创建?
- 提供服务:执行service方法,执行多次
- 每次访问Servlet时,Service方法都会被调用一次。
- 被销毁:执行destroy方法,只执行一次
- Servlet被销毁时执行。服务器关闭时,Servlet被销毁
- 只有服务器正常关闭时,才会执行destroy方法。
- destroy方法在Servlet被销毁之前执行,一般用于释放资源
六、Servlet 3.0 注解,配置
好处
- 支持注解配置,可以不需要web.xml了。
步骤
- 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
- 定义一个类,实现Servlet接口
- 复写方法
- 在类上使用@WebServlet注解,进行配置
- @WebServlet(“资源路径”)
IDEA与tomcat的相关配置
- IDEA会为每一个tomcat部署的项目单独建立一份配置文件
- 查看控制台的log:Using CATALINA_BASE: “C:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast”
- 工作空间项目 和 tomcat部署的web项目
- tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目"对应着"工作空间项目” 的web目录下的所有资源
- WEB-INF目录下的资源不能被浏览器直接访问。
- 断点调试:使用"小虫子"启动 debug 启动
七、Servlet的体系结构
为什么说这个,因为Servlet是个接口,里面只是重写了service方法,不太方便。img文件夹有HttpServlet图
Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
- 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet/doPost方法
八、Servlet相关配置
1.urlpartten:Servlet访问路径
- 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
- 路径定义规则
- /xxx:路径匹配
- /xxx/xxx:多层路径,目录结构
- *.do:扩展名匹配(这种的在*号之前不用再加/)