1.Servlet:在服务器端运行的最早的java控制器,可以接收客户端请求并作出响应、
2.Servlet接口:定义了所有Servlet需要实现的方法
方法名称功能描述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等)
3.GenericServlet抽象类:提供了Servlet与ServletConfig接口方法的默认实现(service( )方法除外)
方法名称功能描述public void init ( ServletConfig config )对Servlet接口中init()方法的实现,对ServletConfig实例进行了保存。此方法还有一个无参的重载方法,可用于子类中重写public String getInitParameter ( String name )返回web.xml中名称为name的初始化参数的值public ServletContext getServletContext ( )返回ServletContext对象的引用
4.HttpServlet抽象类
继承自GenericServlet
处理HTTP协议的请求和响应
方法名称功能描述public void service ( ServletRequest req, ServletResponse res )对GenericServlet类中service()方法的实现,将请求分发给protected void service (HttpServletRequest req, HttpServletResponse res )protected void service ( HttpServletRequest req, HttpServletResponse res )接收HTTP 请求,并将它们分发给此类中定义的 doXXX( ) 方法protected void doXXX ( HttpServletRequest req, HttpServletResponse res )根据请求方式的不同分别调用的相应处理方法,如doGet()、doPost()等
5.ServletConfig接口
在Servlet初始化过程中获取配置信息
一个Servlet只有一个ServletConfig对象
方法名称功能描述String getInitParameter ( String name ) 获取web.xml中设置的以name命名的初始化参数值ServletContext getServletContext( )返回Servlet的上下文对象引用
6.ServletContext接口:获取Web应用上下文,与Servlet容器进行通信
方法名称功能描述String getInitParameter ( String name ) 获取名为name的系统范围的初始化参数值,系统范围的初始化参数可在部署描述符中使用元素定义void setAttribute ( String name, Object object )设置名称为name的属性Object getAttribute ( String name )获取名称为name的属性String getRealPath ( String path )返回参数所代表目录的真实路径void log ( String message )记录一般日志信息
7.ServletRequest接口:获取客户端请求的数据
方法名称功能描述Object getAttribute ( String name )获取名称为name的属性值void setAttribute ( String name, Object object )在请求中保存名称为name的属性void removeAttribute (String name)清除请求中名字为name的属性String getCharacterEncoding ( )返回请求体所使用的字符编码void setCharacterEncoding ( String charset )设置请求体的字符编码String getParameter ( String name )返回指定请求参数的值String[ ] getParameterValues ( String name )返回指定请求参数的全部值RequestDispatcher getRequestDispatcher( String path )返回指向指定路径的请求分发对象
8.HttpServletRequest接口
除了继承ServletRequest接口中的方法,还增加了一些用于读取HTTP请求信
方法名称功能描述String getContextPath( )返回请求URI中表示请求上下文的路径,上下文路径是请求URI的开始部分Cookie[ ] getCookies( )返回客户端在此次请求中发送的所有cookie对象HttpSession getSession( )返回和此次请求相关联的session,如果没有给客户端分配session,则创建一个新的sessionString getMethod( )返回此次请求所使用的HTTP方法的名字,如GET、POSTString getHeader( String name )返回指定的请求头信息
9.ServletResponse接口:设置响应参数和向客户端发送响应数据
方法名称功能描述PrintWriter getWriter ( )返回PrintWriter对象,用于向客户端发送文本String getCharacterEncoding ( )返回在响应中发送的正文所使用的字符编码void setCharacterEncoding ( String charset )设置响应的字符编码void setContentType ( String type )设置发送到客户端的响应的内容类型,此时响应的状态属于尚未提交
10.HttpServletResponse接口
除了继承ServletResponse接口中的方法,还增加了适用于HTTP响应的新方法
方法名称功能描述void addCookie ( Cookie cookie )增加一个cookie到响应中,这个方法可多次调用,设置多个cookievoid addHeader ( String name, String value )将一个名称为name,值为value的响应报头添加到响应中void sendRedirect(String location)发送一个临时的重定向响应到客户端,以便客户端访问新的URLvoid encodeURL ( String url )使用session ID对用于重定向的URL进行编码
11.Servlet的生命周期
生命周期的各个阶段
实例化 Servlet容器创建Servlet的实例
初始化 该容器调用init(ServletConfig)方法
服务 如果请求Servlet,则容器调用servlet()方法
销毁 销毁实例之前调用destroy()方法
(1)http请求
(2)解析请求
(3)创建Servlet实例
(4)调用init()方法
(5)调用Servlet()方法
(6)输出响应信息
(7)响应
(8)调用destroy()方法
12.Servlet初始化参数配置
idea配置servlet
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>demo.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>initParam</param-name>
<param-value>Hello Servlet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>```
1)获取初始化参数
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
- Servlet implementation class HellowServlet
*/
@WebServlet(urlPatterns={"/HellowServlet"},initParams = {@WebInitParam(name = "initParam",value="Hellow Servlet"),
@WebInitParam(name ="aaa",value ="1234566")})//多个初始化参数用逗号隔开
public class HellowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HellowServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求和响应字符编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取初始化参数
String init = getInitParameter("initParam");
String aaa = getInitParameter("aaa");
//打印流对象,生成动态HTML(一般用于Ajax返回)
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>这是我的Servlet生成的动态HTLM内容</title>");
out.println("</head>");
out.println("<body><h1>这是我的第一个Servlet</h1>"
+ "<h1>初始化参数是"+ init +aaa+"</h1></body>");
out.println("</html>");
//关闭打印流
out.close();
doGet(request, response);
}
}
public void doGet ( HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException {
System.out.println("处理请求时,doGet()方法被调用。");
String initParam = getInitParameter( "initParam" );
//更具参数名称进行读取
System.out.println(initParam);
}`
(2)配置Servlet上下文
contextParam
//初始化参数的名字
Hello Servlet
//初始化参数的值
(3)读取Servlet上下文
public class HelloServlet extends HttpServlet {
// …省略其他代码
public void doGet ( HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException {
System.out.println("处理请求时,doGet()方法被调用。");
String initParam = getInitParameter( "initParam" );
//根据参数名进行读取
String contextParam = this.getServletContext().getInitParameter( "contextParam" );
System.out.println("Servlet初始化参数" + initParam);
System.out.println("系统初始化参数" + contextParam);
}
}```
13.Servlet生成的动态HTLM内容
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
- Servlet implementation class HellowServlet
*/
@WebServlet("/HellowServlet")
public class HellowServlet extends HttpServlet {//继承javax.servlet.http.HttpServlet类
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HellowServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求和响应字符编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//打印流对象,生成动态HTML(一般用于Ajax返回)
PrintWriter out = response.getWriter();
//Selvlet输出HTML标签和内容
out.println("<html>");
out.println("<head>");
out.println("<title>这是我的Servlet生成的动态HTLM内容</title>");
out.println("</head>");
out.println("<body><h1>这是我的第一个Servlet</h1></body>");
out.println("</html>");
//关闭打印流
out.close();
doGet(request, response);
}
}
14.总结
![image.png](https://ucc.alicdn.com/pic/developer-ecology/945ac4e9530e4c389bbd451fcabbe231.png)