Servlet基础

简介: Servlet基础

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()方法

image.png

image.png

image.png

(1)http请求
(2)解析请求
(3)创建Servlet实例
(4)调用init()方法
(5)调用Servlet()方法
(6)输出响应信息
(7)响应
(8)调用destroy()方法

12.Servlet初始化参数配置
idea配置servlet

image.png


<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)
相关文章
|
6月前
|
Java
Servlet 教程 之 Servlet 生命周期 4
Servlet生命周期包括初始化、服务和销毁三个阶段:init()方法在创建时调用,service()方法处理客户端请求,destroy()方法在销毁前执行。对于POST请求,doPost()方法处理HTML表单数据。当Servlet不再使用时,由JVM的垃圾回收器自动清理。
41 5
|
6月前
|
Java
Servlet 教程 之 Servlet 生命周期 3
Servlet生命周期包括初始化(init())、服务(service())和销毁(destroy())三个阶段。doGet()方法处理GET请求,接收HttpServletRequest和HttpServletResponse参数。当Servlet不再使用时,由JVM的垃圾回收器自动清理。
50 5
|
6月前
|
Java 容器
Servlet 教程 之 Servlet 生命周期 2
Servlet生命周期包括初始化(init())、处理请求(service())、销毁(destroy())和垃圾回收。service()方法是核心,容器调用它来响应客户端请求,并根据HTTP类型调用doGet()或doPost()。当请求处理完毕,servlet会被销毁,最终由JVM的垃圾回收器清理。
54 5
|
6月前
|
Java 数据库连接
Servlet 教程 之 Servlet 生命周期 5
Servlet生命周期包括初始化(init())、服务(service())和销毁(destroy())三个阶段。destroy()方法在Servlet即将销毁时执行,用于资源释放和清理工作,如关闭数据库连接。之后,Servlet对象等待垃圾回收。
67 4
|
6月前
|
Java 容器
Servlet 教程 之 Servlet 生命周期 6
Servlet生命周期包括初始化(init())、处理请求(service())和销毁(destroy())。当首个请求到达时,容器加载Servlet并调用init()。之后,多个线程共享同一Servlet实例,每个线程独立调用service()处理请求。最后,销毁前调用destroy(),实例由JVM回收。
37 2
|
6月前
|
Java Unix 编译器
Servlet 教程 之 Servlet 实例 2
Servlet教程展示了如何实现HTTP服务。开发者通常继承`HttpServlet`,实现`javax.servlet.Servlet`接口。在Windows的C:\ServletDevel或UNIX的/usr/ServletDevel下创建HelloWorld.java,将其添加到CLASSPATH。然后,使用javac编译,确保环境变量PATH指向Java JDK。成功后,将在目录下生成HelloWorld.class。注意,可能需要包含servlet-api.jar在CLASSPATH中。
36 2
|
6月前
|
Java
Servlet 教程 之 Servlet 生命周期 1
Servlet生命周期包括初始化、服务和销毁三个阶段:init()方法在Servlet创建时调用,仅初始化一次;service()方法处理客户端请求,每次请求都创建新线程;destroy()方法在Servlet销毁前执行。Servlet实例在首次请求时创建,可通过配置在服务器启动时加载。init()方法用于设置一次性初始化数据。
84 3
|
小程序 Java 应用服务中间件
Servlet技术
Servlet技术
63 0
|
Java API
Servlet的环境及实现Servlet的三种方式
Servlet的环境及实现Servlet的三种方式
161 0
|
XML Java 应用服务中间件
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(二)
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(二)
248 0