Servlet
1. IDEA配置Tomcat服务器和WEB项目创建2. WEB项目结构目录分析3. 什么是Servlet4. 第一个Servlet程序5. 创建Servlet程序的三种形式5.1 遵从Servlet接口完成Servlet程序5.2 继承GenericServlet实现Servlet程序5.3 继承HttpServlet实现Servlet程序
5.4 接口 ==> abstract类 ==> 普通类6. Servlet生命周期6.1 Servlet生命周期概述6.2 Servlet生命周期相关方法
7. Servlet配置7.1 web.xml7.2 @WebServlet注解
1. IDEA配置Tomcat服务器和WEB项目创建
2. WEB项目结构目录分析
Day37_WEB_GL
--| src
Java源代码!!!
Servlet程序,包括Java业务逻辑代码
--| WEB
整个WEB项目根目录
----| WEB
-INF
受到WEB服务器保护的文件夹目录,所有的内容都无法直接通过URL或者路径访问,只能通过web
.xml配置或者注解配置访问。
------| classes
Java文件
==> .class字节码文件 classes中的内容会被WEB服务器解析对应加载使用。
------| lib
WEB项目所需的Jar包
------| web
.xml
整个WEB项目的配置文件,web
.xml方式配置支持所有的servlet版本
----| 静态资源
html
, js
, css
, img
3. 什么是Servlet
JavaWEB核心技术,三大组件之一。Server Applet Java服务器端的一个应用程序, 是一个动态资源,用于JavaWEB后台数据的传递,转发,处理,加载
...
在完成Servlet程序中,需要使用和操作的类或者接口
javax
.servlet
.Servlet
接口 JavaWEB项目中所有Servlet程序的总接口
javax
.servtet
.GenericServlet
abstract抽象类,完成了一部分Servlet程序所需方法,遵从Servlet接口
javax
.servlet
.http
.HttpServlet
符合HTTP协议要求的Servlet类,也是一个
abstract类。根据HTTP协议要求完成
了对应HTTP请求方式的方法处理 GET POST
...
HTTPServlet是 GenericServlet子类
javax
.servlet
.http
.HttpServletRequest
给予HTTP协议的request请求类,会包含HTTP请求头的所有数据。
javax
.servlet
.http
.HttpServletResponse
给予HTTP协议的Response响应类,会包含HTTP响应头的所有数据。
SerlvetConfig ServletContext
4. 第一个Servlet程序
package com
.qfedu
.a_servlet
;
import javax
.servlet
.ServletException
;
import javax
.servlet
.annotation
.WebFilter
;
import javax
.servlet
.annotation
.WebServlet
;
import javax
.servlet
.http
.HttpServlet
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
import java
.io
.IOException
;
import java
.io
.PrintWriter
;
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
resp
.setContentType("text/html;charset=utf-8");
PrintWriter writer
= resp
.getWriter();
writer
.append("<h1>舒服~~~巴适~~~</h1>");
writer
.append("<h1>舒服~~~巴适~~~</h1>");
writer
.append("<h1>舒服~~~巴适~~~</h1>");
writer
.append("<h1>舒服~~~巴适~~~</h1>");
writer
.append("<h1>舒服~~~巴适~~~</h1>");
writer
.append("<h1>舒服~~~巴适~~~</h1>");
}
@Override
protected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
doGet(req
, resp
);
}
}
5. 创建Servlet程序的三种形式
5.1 遵从Servlet接口完成Servlet程序
package com
.qfedu
.b_threeServlet
;
import javax
.servlet
.*
;
import javax
.servlet
.annotation
.WebServlet
;
import java
.io
.IOException
;
import java
.io
.PrintWriter
;
@WebServlet("/testServlet1")
public class TestServlet1 implements Servlet {
@Override
public void init(ServletConfig config
) throws ServletException
{
}
@Override
public ServletConfig
getServletConfig() {
return null
;
}
@Override
public void service(ServletRequest req
, ServletResponse res
) throws ServletException
, IOException
{
res
.setContentType("text/html;charset=utf-8");
PrintWriter writer
= res
.getWriter();
writer
.append("遵从Servlet接口实现Servlet程序");
}
@Override
public String
getServletInfo() {
return null
;
}
@Override
public void destroy() {
}
}
5.2 继承GenericServlet实现Servlet程序
package com
.qfedu
.b_threeServlet
;
import javax
.servlet
.GenericServlet
;
import javax
.servlet
.ServletException
;
import javax
.servlet
.ServletRequest
;
import javax
.servlet
.ServletResponse
;
import javax
.servlet
.annotation
.WebServlet
;
import java
.io
.IOException
;
import java
.io
.PrintWriter
;
@WebServlet("/testServlet2")
public class TestServlet2 extends GenericServlet {
@Override
public void service(ServletRequest req
, ServletResponse res
) throws ServletException
, IOException
{
res
.setContentType("text/html;charset=utf-8");
PrintWriter writer
= res
.getWriter();
writer
.append("继承GenericServlet实现Servlet程序");
}
}
5.3 继承HttpServlet实现Servlet程序
package com
.qfedu
.b_threeServlet
;
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("/testServlet3")
public class TestServlet3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
resp
.getWriter().append("HttpServlet NB");
}
@Override
protected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
doGet(req
, resp
);
}
}
5.4 接口 ==> abstract类 ==> 普通类
Servlet接口
制定规范,制定必要方法!!!但是未实现任何的功能!!!
GenericServlet抽象类
完成了必要配套方法,初始化,资源配置,关闭,和信息描述,但是未完成
service方法。
HttpServlet抽象类
依据HTTP协议完成了service方法,并且提供了对应Http协议的处理方式。
Servlet程序类
承上启下!!!
6. Servlet生命周期
6.1 Servlet生命周期概述
Servlet程序是在Tomcat服务器运行的!!!所有的操作过程都是由Tomcat服务器控制
创建
Servlet程序创建过程,重点考虑提供服务的Servlet什么时候创建!
会考虑根据Servlet体量,重要性和加载时间问题,来优化Servlet程序创建时间
初始化
对于当前Servlet配置过程
web.xml
注解配置
利用初始化过程,辅助程序加载处理对应资源
服务
根据用户请求提供对应的服务,需要考虑的核心是Request对象和Response对象。
url
http://localhost:8080/Day37/studentService?method=addStudent&XXXXXX
销毁
销毁对应的Servlet程序。
1. Tomcat服务器关闭之后会自动关闭销毁当前Tomcat服务器中所有注册
Servlet程序
2. 自行销毁,考虑用户在退出对应需求,关闭对应请求的情况下,销毁对应
Servlet程序。
6.2 Servlet生命周期相关方法
创建
构造方法!!!
Tomcat服务器会根据对应资源的请求,创建对应Servlet类对象,会执行无参数构造方法。
初始化
init(ServletConfig config
);
服务
:
service(Request
, Response
);
销毁
:
destroy
package com
.qfedu
.c_ServletLife
;
import javax
.servlet
.ServletConfig
;
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("/servletLife")
public class ServletLife extends HttpServlet {
public ServletLife() {
System
.out
.println("ServletLife Constructor Method Called....");
}
@Override
public void init(ServletConfig config
) throws ServletException
{
super.init(config
);
System
.out
.println("ServletLife init Method Called..");
}
@Override
protected void service(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
resp
.getWriter().append("<h1>ServletLife Service Method Called...</h1>");
System
.out
.println("ServletLife Service Method Called...");
}
@Override
public void destroy() {
super.destroy();
System
.out
.println("ServletLife Destroy Method Called...");
}
}
7. Servlet配置
7.1 web.xml
可以支持任意版本的Servlet程序!!!
<?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_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>ServletConf1
</servlet-name>
<servlet-class>com.qfedu.d_config.ServletConf1
</servlet-class>
<init-param>
<param-name>aaa
</param-name>
<param-value>骚磊
</param-value>
</init-param>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletConf1
</servlet-name>
<url-pattern>/servletConf1
</url-pattern>
</servlet-mapping>
</web-app>
7.2 @WebServlet注解