1.Servlet技术
2.Servlet类的继承体系
3.ServletConfig类
4.ServletContext类
1.Servlet技术
a) 什么是Servlet
Servlet是javaWeb的三大组件。Servlet程序,Listener监听器。Filter过滤器。
Servlet程序主要是运行在Tomcat服务器上。
Servlet程序的作用:接收客户端的请求。响应给客户端数据。
b) 手动实现Servlet程序
1、编写一个类去实现Servlet接口
2、实现Servlet程序中的service方法(处理业务的方法)
3、到web.xml中去配置Servlet程序的访问地址
Servlet程序的源代码:
public class HelloServlet implements Servlet {
/**
* Servlet程序接收客户端的请求,并且响应数据<br/>
* service在每请求进来 的时候,负责 处理业务
*/
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("HelloServlet 程序被访问了~");
}
}
web.xml中的配置:
<!-- servlet标签用来配置一个Servlet程序 -->
<servlet>
<!-- 给你要配置的Servlet程序起一个名称,一般放的是类名(可以任意自定义) -->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet-class标签是配置Servlet程序的全类名 -->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<!-- servlet-mapping是配置Servlet程序的访问地址 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<!--
url-paatern是配置访问地址。
/hello 表示http://ip:port/工程名/hello
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>

a) Servlet的生命周期
1、先执行Servlet的构造方法
2、执行Servlet程序的init初始化方法
构造方法和init初始化方法,只是第一次访问的时候由Tomcat服务器来调用,只调用一次
3、执行Service方法 (每次访问都会被调用)
4、执行destroy方法(服务器停止,停止web工程 )
b) 模拟GET请求和POST请求的分发
请求分为GET请求和POST请求。(一般GET请求和POST请求有可能会做不同的业务操作)
服务器如何区分 GET请求和POST请求。
/**
* Servlet程序接收客户端的请求,并且响应数据<br/>
* service在每请求进来 的时候,负责 处理业务
*/
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// System.out.println("HelloServlet 程序被访问了~");
HttpServletRequest httpRequest = (HttpServletRequest) request;
// getMethod返回是GET或POST,返回请求的方式
String method = httpRequest.getMethod();
System.out.println(method);
if ("GET".equals(method)) {
// 如果是GET请求,执行get业务
doGet();
} else if ("POST".equals(method)) {
//执行post请求的业务操作
doPost();
}
}
/**
* 这是GET请求需要做的工作
*/
public void doGet() {
System.out.println("doGet 这是GET请求");
}
/**
* 这是POST请求需要做的工作
*/
public void doPost() {
System.out.println("doPost 这是POST请求");
}
a) 通过继承HttpServlet实现Servlet程序
在实现的开发中,我们都是使用HttpServlet抽取类去实现Servlet程序。
1、编写一个类去继承HttpServlet类
2、重写doGet方法和doPost方法
3、到web.xml中去配置Servlet程序的访问地址
HelloServlet2类
public class HelloServlet2 extends HttpServlet {
/**
* doGet方法,是GET请求的时候,会自动的调用
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("这是GET请求,调用了doGet方法");
}
/**
* doPost方法,是POST请求的时候,会自动的调用
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("这是POST请求,调用了doPost方法");
}
}
web.xml中的配置:
<servlet>
<servlet-name>abc</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>abc</servlet-name>
<!-- url-pattern 中 /ccc 表示http://ip:port/工程名/ccc
<br/>
url-pattern以斜线打头,配置的地址跟在工程名的后面
web.xml中有了修改之后一定要重启Tomcat服务器才能生效
在浏览器地址栏中输入地址,然后敲 回车是GET请求
-->
<url-pattern>/ccc</url-pattern>
</servlet-mappi
2.Servlet类的继承体系

我们在重写doGet方法或doPost方法的时候,方法体内,一定不能调用super.doGet或super.doPost代码。否则会报405错误
3.ServletConfig类
我们所有的类都是由tomcat服务器进行创建。我们负责使用。
ServletConfig类它封装了Servlet程序的配置信息。
a) ServletConfig类的三大作用
1、获取Servlet程序在web.xml中配置的名称
2、获取在web.xml中配置的初始化参数
3、获取ServletContext对象
public class ConfigServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
// 1、获取Servlet程序在web.xml中配置的名称
System.out.println("在web.xml中配置的servlet-name名称:" + config.getServletName());
// 2、获取在web.xml中配置的初始化参数
System.out.println("username初始化参数值:" + config.getInitParameter("username"));
System.out.println("url初始化参数值:" + config.getInitParameter("url"));
// 3、获取ServletContext对象
System.out.println( config.getServletContext() );
}
}
web.xml中的配置:
<servlet>
<servlet-name>ConfigServlet</servlet-name>
<servlet-class>com.atguigu.servlet.ConfigServlet</servlet-class>
<!-- init-param 是给Servlet程序配置一个初始化键值对参数 -->
<init-param>
<!-- param-name是参数名 -->
<param-name>username</param-name>
<!-- param-value是参数值 -->
<param-value>root</param-value>
</init-param>
<!-- init-param 是给Servlet程序配置一个初始化键值对参数 -->
<init-param>
<!-- param-name是参数名 -->
<param-name>url</param-name>
<!-- param-value是参数值 -->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ConfigServlet</servlet-name>
<url-pattern>/configServlet</url-pattern>
</servlet-mapping>
注意:ServletConfig是在GenericServlet类中持有的引用。当我们需要在自己自定义的Servlet程序中重写init(ServletConfig)初始化方法的时候。
一定要调用super.init(config); 否则父类中的ServletConfig就不能得到初始化
4.ServletContext类
a) 什么是ServletContext?
1、ServletContext对象是一个接口。
2、ServletContext在一个web工程中只有一个对象实例(也是由Tomcat服务器创建)。
3、ServletContext是一个域对象。
什么是域对象?
域对象指的是可以像map一样存取数据的对象。
put setAttribute 保存数据
get getAttribute 获取数据
域指的保存和获取数据的范围。ServletContext对象它的数据操作范围是整个web工程。
ServletContext对象在web工程启动的时候创建。在web工程停止的时候销毁。
b) ServletContext类的四个作用
1、它可以获取在web.xml中配置的上下文参数<context-param>
2、它可以获取到当前web工程的工程名(工程路径)
3、它可以获取web工程发布到服务器上之后。文件或目录在服务器磁盘上的绝对路径。
4、它可以像map一样存取数据。
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// b)ServletContext类的四个作用
ServletContext ctx = getServletContext();
// 1、它可以获取在web.xml中配置的上下文参数<context-param>
System.out.println("上下文初始化参数password的值:"
+ ctx.getInitParameter("password"));
System.out.println("上下文初始化参数driverClass的值:"
+ ctx.getInitParameter("driverClass"));
// 2、它可以获取到当前web工程的工程名(工程路径)
// getContextPath()获取当前工程名
System.out.println(ctx.getContextPath());
// 3、它可以获取web工程发布到服务器上之后。文件或目录在服务器磁盘上的绝对路径。
// getRealPath是获取指定的路径的资源在服务器上的绝对路径。
// / 斜线,表示 根,
// / 斜线 在web工程中 表示到http://ip:port/工程名/ 映射到 代码的WebContent目录
System.out.println(ctx.getRealPath("/"));
System.out.println("WebContent/css的绝对路径是:" + ctx.getRealPath("/css"));
System.out.println("WebContent/imgs/ludashi.jpg的绝对路径是:" + ctx.getRealPath("/imgs/ludashi.jpg"));
}
在web.xml中的配置:
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>driverClass</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>