Servlet
Servlet
是一个用于扩展服务器端功能的服务器端组件技术
- 运行在服务器端,所以调用执行是由服务器负责
- 在web.xml中需要进行配置,就是将servlet和一个请求地址建立对应关系,当浏览器对地址 发起请求时,服务器则按照规则调用serlvet类中的方法
- 服务器端的组件技术
- 用于扩展服务器端功能,可以实现动态网页的开发
Servlet接口
1
、定义类实现
Servlet
接口
public class HelloServlet implements Servlet {
行一次。主要用于实现Servlet的初始化操作,例如读取配置文件中当前Servlet的初始化配置信息。
当服务器调用该方法时会将当前servlet的初始化配置存储在cnfig对象中
public void init(ServletConfig config) throws ServletException {
private ServletConfig config;
public ServletConfig getServletConfig() {
线程的方式运行service方法,一个客户端请求对应一个线程。服务器调用service方法时会传入2个参
数对象,req用于封装客户端的请求信息,resp用于封装服务器的响应信息。Servlet默认采用单实例
多线程的方式对客户端浏览器请求提供服务,service执行完成后不会自动销毁,而是常驻内存
public void service(ServletRequest req, ServletResponse resp) throws
ServletException, IOException {
public String getServletInfo() {
return "当前servlet对象的说明信息";
运行一次。servlet对象默认是常驻内存,只有在服务器关闭或者内存严重不足而当前Servlet对象被
2
、在
web.xml
中针对
servlet
类进行配置,将
servlet
和一个或者多个地址建立对应关系
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0"> xml文件头用于说明当前xml文件的语法规则
<servlet> 将servlet类和一个名称建立对应关系
<servlet-name>helloservlet-name>
<servlet-class>com.yan.action.HelloServletservlet-class>
<servlet-mapping> 将一个servlet名称和请求地址建立对应关系
<servlet-name>helloservlet-name>
<url-pattern>/hello.dourl-pattern>
servlet三生命周期
Servlet开发
- 直接实现Servlet接口
- 抽象类GenericServlet用于非标准协议开发,例如游戏的服务器端
- 抽象类HttpServlet是GenericServlet的子类,用于http协议应用开发,例如网站
HttpServlet的运行原理
public abstract class HttpServlet extends GenericServlet,针对Servlet接口的5种
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String method = req.getMethod();
例如get/post/put/delete,...
if (method.equals(METHOD_GET)) {
} else if (method.equals(METHOD_HEAD)) {
} else if (method.equals(METHOD_POST)) {
} else if (method.equals(METHOD_PUT)) {
} else if (method.equals(METHOD_DELETE)) {
} else if (method.equals(METHOD_OPTIONS)) {
} else if (method.equals(METHOD_TRACE)) {
lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if (protocol.endsWith("1.1")) { 判断http协议的版本号,发送报错信息
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
Servlet初始化配置
在服务器调用
Servlet
的
init
方法时会传入一个
ServletConfig
对象,其中包含当前
Servlet
的所有初始化配置
public void init(ServletConfig config) throws ServletException {}
public void init(ServletConfig config) throws ServletException {
配置位于
web.xml
文件
<servlet-name>hello3servlet-name>
<servlet-class>com.yan.action.Hello3Servletservlet-class>
<init-param> 初始化参数,可以配置多个
<param-name>rowsparam-name> 配置的参数名称
<param-value>3param-value> 对应配置参数名称的配置值
<param-name>widthparam-name>
<param-value>120param-value>
在
servlet
中获取配置参数
可以在
GenericServlet
提供的扩展点中获取配置参数