Servlet入门学习

1.什么是servlet:
servlet是JAVAWeb 的三大组件之一,他属于动态资源。servlet的作用是处理请求,服务器会把接收到的请求交给servlet来处理,在servlet中通常需要:
*接收请求数据;
*处理请求;
*完成响应;
例如客户端发出的登陆请求,或者输出注册请求,这些请求都应该有servlet来完成处理,servlet需要我们自己来编写,每个servlet必须实现javax.servlet.Servlet接口。
生命周期方法:
* void init(ServletConfig) 出生之后只调用一次;
*void service (ServletRequest,ServletResponse respone) 每次处理请求都会被调用;
* void destroy() 最后被调用,一次;
特性:
*单例,一个类只有一个对象;当然可以存在多个Servlet类;
*线程不安全的,所以它的效率是高的!
servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。


2.实现Servlet的方式:
三种:
*实现javax.servlet.Servlet接口。
*继承javax.servlet.GenericServlet类。
*继承javax.servlet.http.HttpServlet类。
通常我们会去继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。
每个Servlet都是唯一的,他们嗯那个处理的请求是不同的。
Servlet.java
public interface Servlet{
public void init(ServletConfig) throws ServletException;
public ServletConfig getServletConfig();
public String getServletInfo();
public void destroy();
}
servlet中的方法,大多数不用我们来调用,而是由tomcat来调用,并且Servlet对象也不由我们创建,由tomcat来创建。
ServletConfig方法是获取对应一段web.xml中的Servlet的配置信息
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>day9.AServlet</servlet-class>
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
<init-param>
<param-name>p2</param-name>
<param-value>v2</param-value>
</init-param>
</servlet>
API:
String getServletName() 获取的是<servlet-name>中的内容;
ServletContext getServletContext();获取的是servlet中的上下文。
String getInitParameter(String name):通过名称获取指定初始化参数的值。
Enumeration getInitParameterNames() 获取所以初始化参数的名称。
3.GenericServlet:
1.GenericServlet概述:实现了接口Servlet  ServletConfig.
在GenericServlet中,service是一个抽象方法,也就是当你以继承GenericServlet的方式创建一个servlet时,必须实现service方法,在里面处理前端发过来的request,和response
package javax.servlet;  
import java.io.IOException;  
import java.io.Serializable;  
import java.util.Enumeration;  
import java.util.ResourceBundle;  
public abstract class GenericServlet  
  implements Servlet, ServletConfig, Serializable  
{  
  private static final String LSTRING_FILE = "javax.servlet.LocalStrings";  
  private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.LocalStrings");  
  private transient ServletConfig config;  
  public void destroy()  
  {  
  }  
  public String getInitParameter(String name)  
  {  
    ServletConfig sc = getServletConfig();  
    if (sc == null) {  
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));  
    }  
    return sc.getInitParameter(name);  
  }  
  public Enumeration getInitParameterNames()  
  {  
    ServletConfig sc = getServletConfig();  
    if (sc == null) {  
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));  
    }  
    return sc.getInitParameterNames();  
  }  
  public ServletConfig getServletConfig()  
  {  
    return this.config;  
  }  
  public ServletContext getServletContext()  
  {  
    ServletConfig sc = getServletConfig();  
    if (sc == null) {  
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));  
    }  
    return sc.getServletContext();  
  }  
  public String getServletInfo()  
  {  
    return "";  
  }  
  public void init(ServletConfig config)  
    throws ServletException  
  {  
    this.config = config;  
    init();  
  }  
  public void init()  
    throws ServletException  
  {  
  }  
  public void log(String msg)  
  {  
    getServletContext().log(getServletName() + ": " + msg);  
  }  
  public void log(String message, Throwable t)  
  {  
    getServletContext().log(getServletName() + ": " + message, t);  
  }  
  public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse)  
    throws ServletException, IOException;  
  public String getServletName()  
  {  
    ServletConfig sc = getServletConfig();  
    if (sc == null) {  
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));  
    }  
    return sc.getServletName();  
  }  
}  




4.HttpServlet:
HttpServlet extends GenderServlet{
void service(ServletRequest,ServletResponse)--生命周期方法
*强转两个参数为Http协议相关的类型。
*调用本类的service(HttpServletRequest,HttpServletResponse)


void service(HttpServletRequest,HttpServletResponse)--参数已经是http协议相关的,使用起来就更加方便。
*它会通过request得到当前请求的请求方法,例:get或者post.
*根据请求方法再调用doGet()和doPost()方法


void doGet()---重写


void doPost()---重写
}


猜你喜欢

转载自blog.csdn.net/qq_18725165/article/details/80367737
今日推荐