文章目录
1 Servlet是什么
Servlet是JavaWeb的三大组件之一,它属于动态资源,Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
(1)接收请求数据;
(2)处理请求;
(3)完成响应。
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。
2 Servlet之接口和类的介绍
实现Servlet有三种方式:
(1)实现javax.servlet.Servlet接口;
(2)继承javax.servlet.GenericServlet类;
(3)继承javax.servlet.http.HttpServlet类;
Servlet接口定义如下:
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
Servlet的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,而是由Tomcat来创建,其方法如下:
(1)public void init(ServletConfig config) throws ServletException;
:生命周期方法,它会在Servlet对象创建之后马上执行,并且只执行一次。
(2)public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
:生命周期方法,它会被调用多次,每次处理请求都会调用这个方法。
(3)public void destroy();
:生命周期方法,它会在Servlet被销毁之前调用,并且它只会被调用一次,但是这个并不是Servlet的销毁方法。
(4)public String getServletInfo();
:获取Servlet的信息。
(5)public ServletConfig getServletConfig();
:可以用来获取Servlet的配置信息。
package org.lks.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class BServlet implements Servlet {
/**
* 生命周期方法,初始化对象后立即调用,只调用一次
*/
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
System.out.println("I'm born");
}
/**
* 返回Servlet配置信息
*/
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
/**
* 生命周期方法,客户端每发送一次请求就调用一次
*/
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* 返回Servlet的基本信息
*/
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
/**
* 在Servlet对象回收前调用,只调用一次
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("Oh-h-h-h, I'll be back!");
}
}
3 Servlet的生命周期
Servlet特性:
(1)Servlet是单例模式设计。
(2)线程不安全的,但是效率较高。
Servlet类由我们来写,但是对象由服务器来创建,并且由服务器来调用相应的方法。
4 ServletConfig介绍
ServletConfig类的定义:public interface ServletConfig
。其拥有的方法如下:
(1)public java.lang.String getServletName()
:获取的是<servlet-name>
中的内容;
(2)public ServletContext getServletContext()
:获取Servlet上下文对象;
(3)public java.lang.String getInitParameter(java.lang.String name)
:通过名称获取指定初始化参数的值。
(4)public java.util.Enumeration getInitParameterNames()
:获取所有初始化参数的名称。
接口对象如果自己没实现SetvletConfig接口,Tomcat会替我们实现。
5 Servlet相关类之ServletRequest和ServletResponse
1、ServletRequest接口介绍
(1)接口的定义:public interface ServletRequest
(2)接口常用方法:
|——根据属性名获取属性:public java.lang.Object getAttribute(java.lang.String name)
|——得到客户端国家编码:public java.util.Locale getLocale()
|——根据变量名获取变量值:public java.lang.String getParameter(java.lang.String name)
|——根据变量名获取所有变量值(如果有多个):public java.lang.String[] getParameterValues(java.lang.String name)
|——设置字符编码:public void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingException
2、ServletResponse接口介绍
(1)接口的定义:public interface ServletResponse
(2)接口常用方法:
|——设置文档返回类型:public void setContentType(java.lang.String type)
|——设置对客户端响应的Locale对象(国际化程序开发):public void setLocale(java.util.Locale loc)
|——用于响应消息的返回:public java.io.PrintWriter getWriter() throws java.io.IOException
6 GenericServlet介绍
GenericServlet是一个抽象类,其定义如下:
public abstract class GenericServlet
extends java.lang.Object
implements Servlet, ServletConfig, java.io.Serializable{}
示例代码:
package org.lks.servlet;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CServlet extends GenericServlet{
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config = config;
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return this.config;
}
@Override
public ServletContext getServletContext() {
// TODO Auto-generated method stub
return this.config.getServletContext();
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return "Uh-h-h-h, what do you want to know me?";
}
@Override
public String getServletName() {
// TODO Auto-generated method stub
return this.config.getServletName();
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("program by yourself!!!");
}
}
7 HttpServlet介绍
下面是HttpServlet类的介绍:
下面是HttpServlet的请求调用示意图。