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)
相关文章
|
3月前
|
安全 Java 应用服务中间件
Servlet 教程 之 Servlet 简介 1
Servlet是运行在Web服务器上的Java程序,用于处理HTTP请求,充当浏览器和服务器间的中间层。它们接收用户输入,与数据库交互并动态生成网页。相比CGI,Servlet性能更优,运行在服务器地址空间内,跨平台且受安全管理器保护,可访问全部Java类库。
20 0
|
3月前
|
XML 安全 Java
Servlet 教程 之 Servlet 简介 3
Servlet是运行在Web服务器上的Java程序,用于处理HTTP请求和响应,与数据库或应用交互。相比CGI,Servlet性能更优,平台无关,并受服务器安全管理器保护。它们主要任务包括读取客户端数据、处理信息、生成结果及发送响应。Servlet利用javax.servlet和javax.servlet.http包构建,遵循Java Servlet 2.5和JSP 2.1规范,可被编译成Java类运行。
28 1
|
3月前
|
XML 缓存 安全
Servlet 教程 之 Servlet 简介 2
Servlet是Java编写的Web服务器程序,用于处理HTTP客户端请求和与服务器/数据库交互。相比CGI,Servlet性能更优,平台无关,并受服务器安全管理系统保护。Servlet的主要任务包括读取表单数据、处理HTTP请求、访问数据库、生成结果及发送响应。它们可以与applets、数据库或其他软件通信,支持多种文档格式。
24 1
|
3月前
|
JSON 网络协议 前端开发
简介Servlet2
简介Servlet
32 1
|
10月前
|
小程序 Java API
04JavaWeb基础 - Servlet简介
04JavaWeb基础 - Servlet简介
27 0
|
11月前
|
小程序 Java 应用服务中间件
Servlet技术
Servlet技术
55 0
|
小程序 Java 应用服务中间件
Servlet简介
Servlet简介
74 0
Servlet简介
|
缓存 Java
|
Java API
Servlet的环境及实现Servlet的三种方式
Servlet的环境及实现Servlet的三种方式
136 0
|
Java 应用服务中间件 UED
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(一)
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(一)
186 0