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()---重写
}
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()---重写
}