Servlet

Servlet基础

Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写,具有Java语言的优点

Servlet对象主要封装了对HTTP请求的处理,并且它运行需要Servlet容器的支持

Servlet结构体系
Servlet实质上就是按Servlet规范编写的Java类,但它可以处理Web应用中的相关请求
Servlet_第1张图片
在上图中,其中Servlet接口和ServletConfig接口定义了Servlet的基本方法以及封装了Servlet的相关配置信息

GenericServlet是一个抽象类,它分别实现了上述3个接口,它的子类HttpServlet对HTTP请求处理进行实现,这个对象为HTTP请求中POST,GET等类型提供了具体的操作方法

通常情况下,我们编写的Servlet都继承于HttpServlet

Servlet代码结构
在Java中,通常所说的Servlet是指HttpServlet对象,在声明一个对象为Servlet时,需要继承HttpServlet类,继承之后,可以重写HttpServlet类中的方法,实现对HTTP请求进行处理

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    public void init() throws ServletException{
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    }
    
    public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    }
    
    public void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    }
    
    public void destroy(){
        super.destroy();
    }
}

该类包含6个方法,其中init()方法与destroy()方法为Servlet初始化与生命周期结束所调用的方法,其余4个方法为Servlet针对不同的HTTP请求类型所提供的方法

Servlet API编程常用接口和类

Servlet接口
在Servlet开发中,任何一个Servlet对象都要直接或间接实现javax.servlet.Servlet接口,在该接口中包含5个方法:

方法 说明
public void init(ServletConfig config) Servlet实例化后,Servlet容器调用该方法来完成初始化工作
public void service(ServletRequest request, ServletResponse response) 用于处理客户端的请求
public void destroy() 当Servlet对象从Servlet容器中移除时,容器调用该方法,以便释放资源
public ServletConfig getServletConfig() 用于获取Servlet对象的配置信息,返回ServletConfig对象
public String getServletInfo() 返回有关Servlet的信息,它是纯文本格式的字符串,如作者,版本等

eg:创建一个Servlet,向客户端输出一个字符串

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;

public class WordServlet implements Servlet {
    public void destroy(){
    }
    
    public ServletConfig getServletConfig(){
        return null;    
    }
    
    public String getServletInfo(){
        return null;
    }
    
    public void init(ServletConfig arg0) throws ServletException {
    }
    
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();
        writer.println("hello!");
        writer.close();
    }
}

在Servlet中,主要方法时service(),当客户端请求送达时,Servlet容器调用service()方法对请求进行处理

ServletConfig接口

ServletConfig接口位于javax.servlet包,封装了Servlet的配置信息,在Servlet初始化期间被传递

每个Servlet有且只有一个ServletConfig对象,该对象定义了4个方法:

方法 说明
public String getInitParameter(String name) 返回String类型名称为name的初始化参数值
public Enumeration getInitParameterNames() 获取所有初始化参数名的枚举集合
public ServletContext getServletContext() 用于获取Servlet上下文对象
public String getServletName() 返回Servlet对象的实例名

HttpServletRequest接口

HttpServletRequest接口位于javax.servlet.http包中,继承了javax.servlet.ServletRequest接口,常用方法如下:

方法 说明
public String getContextPath() 返回请求的上下文路径,此路径以"/"开头
public Cookie[] getCookies() 返回请求中发送的所有cookie对象,返回值为cookie数组
public String getMethod() 返回请求所使用的HTTP类型,如get,post等
public String getQueryString() 返回请求中参数的字符串形式,如请求MyServlet?username=mr,则返回username=mr
public String getRequestURI() 返回主机名到请求参数之间的字符串形式
public StringBuffer getRequestURL() 返回请求的URL,此URL中不包含请求的参数,注意此方法返回的数据类型为StringBuffer
public String getServletPath() 返回请求URI中的Servlet路径的字符串,不包含请求中的参数信息
public HttpSession getSession() 返回与请求关联的HttpSession对象

HttpServletResponse接口
HttpServletResponse接口位于javax.servlet.http包,继承了javax.servlet.servletResponse接口,常用方法如下:

方法 说明
public void addCookie(Cookie cookie) 向客户端写入cookie信息
public void sendError(int sc) 发送一个错误状态码为sc的错误响应到客户端
public void sendError(int sc, string msg) 发送一个包含错误状态码及错误信息的响应到客户端,参数sc为错误状态码,参数msg为错误信息
public void sendRedirect(String location) 使用客户端重定向到新的URL,参数location为新的地址

GenericServlet类

在编写Servlet对象时,需要实现javax.servlet.Servlet接口,在Servlet接口中包含5个方法,这样操作不方便,javax.servlet.GenericServlet类简化了此操作,实现了Servlet接口

public abstract class GenericServlet 
	extends Object 
	implements Servlet, ServletConfig, Serializable

GenericServlet类是一个抽象类,分别实现了Servlet接口与ServletConfig接口。

该类实现了除service()之外的其他方法,所以创建Servlet对象时,可以继承GenericServlet类来简化程序代码,只需要实现service()方法

HttpServlet类

javax.servlet.HttpServlet类对GenericServlet类进行了扩展,为HTTP请求提供了灵活的方法

public abstract class HttpServlet
	extends GenericServlet implements Serializable

HttpServlet类仍是一个抽象类,实现了service()方法,并针对HTTP1.1中定义的7种请求类型提供了相应方法:doGet(),doPost()、doPut()、doDelete()、doHead()、doTrace()和doOptions()方法,在此7个方法种,除了对doTrace()和doOptions()进行简单实现外,其他方法没有进行实现,需要对其进行重写

Servlet开发

Servlet创建

Servlet配置

要使Servlet对象正常运行,需要进行适当配置,以告知Web容器哪一个请求调用哪一个Servlet对象处理,对Servlet起到一个注册的作用。

Servlet的配置包含在web.xml文件中,主要通过以下两种方法进行设置

1.声明Servlet对象

在web,xml文件中,通过标签声明一个Servlet对象,在此标签下包含两个主要子元素:,其中,用于指定Servlet名称,用于指定Servlet对象的完整位置,包含Servlet对象的包名和类名,声明语句如下:

<servlet>
        <servlet-name>FirstServletNewservlet-name>
        <servlet-class>com.wang.yx.servlet.FirstServletNewservlet-class>
servlet>

2.映射Servlet

在web.xml文件中声明了Servlet对象之后,需要映射访问Servlet的URL。

该操作使用标签进行配置。标签包含两个子元素,为,其中元素与标签中的相对应,不可随意命名,元素用于映射访问的URL

其配置如下:

<servlet-mapping>
        <servlet-name>FirstServletNewservlet-name>
        <url-pattern>/FirstServletNewurl-pattern>
servlet-mapping>

你可能感兴趣的:(Java,Web,Java,Servlet)