三、Servlet、ServletConfig、ServletContext
1.Servlet技术
1.1 Servlet概述:
什么是servlet:它是运行在web服务器端的一个java小程序,简单来说,它就是一个java类
在使用servlet时,需要导入javax.servlet下的jar包。比如:tomcat服务器提供了
servlet的servlet-api.jar包,所以在开发时用tomcat服务器就不需要再导入servlet的jar包。
Servlet它是一个资源,是用来被用户访问的资源,同时是一个动态资源,它是由sun指定的servlet规范。
Servlet的作用:它是基于Http协议的,主要是用来接收客户端发送的请求,处理请求,把数据响应给客户端。
1.2 Servlet的入门
1.Servlet的接口和实现类:
>>>Servlet它是一个接口,在javax.servlet 包下面。
五个方法:
* destroy():执行这个方法,销毁了servlet对象
* init(ServletConfig config):在web服务器创建servlet对象以后,执行这个初始化方法。
* service(ServletRequest req, ServletResponse res) :服务方法,用来接收客户端发送的请求,并且响应数据到客户端
* getServletConfig():现在不讲
* getServletInfo():servlet 的信息,比如作者、版本和版权,这个方法在开发中不用。
>>>GenericServlet,它是一个类,实现了Servlet接口
>>>HttpServlet,它是一个类,实现了Servlet接口,同时继承了GenerciServlet
创建servlet三种方式
>>>直接实现Servlet接口。
>>>继承GenericServlet类
>>>继承HttpServlet类。
一般在开发中,创建servlet,通常去继承这个HttpServlet.
比如:class MyServlet extends HttpServlet{ 重写咱们所需要的方法}
1.3.实现第一个Servlet程序
>>> 1.自己手动创建Servlet,通过Dos命令窗口编译Servlet,把编译好的class文件部署到tomcat服务器运行。
>>> 2.通过Eclipse创建Servlet,部署到tomcat服务器,然后就可以访问咱们所需要的Servlet。
步骤:
1.创建HelloWordServlet,继承GenericServlet
2.重写父类GenerciServlet的service方法。
3.在服务方法里面,处理客户端的请求后,把数据响应给客户端。
比如:
public class HelloWordServlet extends GenericServlet{
@Override
public void service(ServletRequest arg0, ServletResponse response)
throws ServletException, IOException {
// 处理客户端发送的请求,并且把数据响应给客户端
System.out.println("接收了客户端的请求-------------------");
//把数据响应给客户端,与浏览器绑定的输出流,作用向浏览器输出数据
PrintWriter pw = response.getWriter();
pw.print("Hello World");
}
}
访问Servlet,提供servlet的访问路径:
比如:<!-- 配置访问/hello路径,对应的servlet -->
<servlet>
<servlet-name> helloWorld</servlet-name>
<servlet-class>cn.itcast.firstmyapp.servlet.HelloWordServlet</servlet-class>
</servlet>
<!-- 配置浏览器访问servlet的路径 -->
<servlet-mapping>
<servlet-name> helloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
通过浏览器访问:http://localhost:8080/webFirst/hello
就找到对应的HelloWorldServlet,把数据响应给浏览器。
导入jar包:先拷贝对应的jar包,放到WebContent下面的WEB-INF下面的lib文件夹下面。
jar的图标就变成小奶瓶。
1.3.Servlet的生命周期:
生命周期:自然界人从出生到最终走向西方极乐世界,这个周期过程就是人的生命周期,
其实servlet的生命周期和人的一样,从servlet对象被创建,经过使用servlet对象,
到最终servlet对象被销毁,整个过程就是servlet的生命周期。
与生命周期相关的三个方法:
>>> 初始化阶段:
init(ServletConfig config) 初始化方法:首次访问这个Servlet,servlet对象会被创建,执行初始化方法,执行一次。
>>> 运行阶段:
service(ServletRequest req, ServletResponse res) 服务方法:每次访问servlet时,服务方法都会被执行,执行多次。。
>>> 销毁阶段:
destroy()销毁方法:在服务器正常关闭时。会执行销毁方法,执行一次。
比如:
public class LifeServlet extends GenericServlet {
/**
* 初始化方法
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("首次访问LifeServlet时,会执行这个初始化方法-------------");
}
/**
* servlet的服务方法
*/
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("每次访问lifeservlet,都会执行这个服务方法--------");
}
/**
* 销毁方法
*/
@Override
public void destroy() {
System.out.println("在服务器关闭时,会执行销毁方法----------");
}
}
在web.xml文件上面配置访问路径:
<servlet>
<servlet-name>lifeServlet</servlet-name>
<servlet-class>cn.itcast.firstmyapp.servlet.LifeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>lifeServlet</servlet-name>
<url-pattern>/life</url-pattern>
</servlet-mapping>
课堂练习:
|
package cn.itcast.firstmyapp.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.Principal;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloWordServlet extends GenericServlet{
//按alt+/
@Override
public void service(ServletRequest req, ServletResponse response) throws ServletException, IOException {
//处理客户端发送请求,并且把数据响应给客户端
System.out.println("接收了客户端的请求.......大数据2005");
//把数据响应给客户端,与浏览器绑定的输出流。作用向浏览器输出数据
PrintWriter pw = response.getWriter();
pw.print("Hello world dashuju2005 大数据2005");
}
}
package cn.itcast.firstmyapp.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class servlet2
*/
@WebServlet("/servlet2")
public class servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
public void service(ServletRequest req, ServletResponse response) throws ServletException, IOException {
//处理客户端发送请求,并且把数据响应给客户端
System.out.println("接收了客户端的请求.......第二个servlet");
//把数据响应给客户端,与浏览器绑定的输出流。作用向浏览器输出数据
PrintWriter pw = response.getWriter();
pw.print("dashuju2005 second servlet");
}
@Override
public void init() throws SecurityException{
System.out.println("init 函数被调用");
}
@Override
public void destroy() {
System.out.println("destroy 函数被调用");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>FiratServlet</display-name>
<servlet>
<servlet-name>helloWorld</servlet-name>
<servlet-class>cn.itcast.firstmyapp.servlet.HelloWordServlet</servlet-class>
</servlet>
<!-- 配置浏览器访问servlet的路径 -->
<servlet-mapping>
<servlet-name>helloWorld</servlet-name>
<url-pattern>/dashuju2005</url-pattern>
</servlet-mapping>
</web-app>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
大数据2005班 真牛!!!
</body>
</html>
操作提示:
第二钟方式创建servlet
详细操作步骤:(嘿嘿,从下往上看)