目录
一、Servlet 核心接口和类
1.1 Servlet 接口
1.2 GenericServlet抽象类
1.3 HttpServlet类(推荐使用这个)
1.4 注意
二、servlet的两种配置方式
2.1 配置 web.xml(Servlet2.5之前使用)
2.2 使用注解(Servlet3.0之后支持,推荐使用)
在Servlet体系结构中,除了实现 Servlet 接口,还可以通过继承 GenericServlet 或 HttpServlet 类,完成编写。
在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。
该接口包括以下五个方法:
init(ServletConfig config)
ServletConfig getServletConfig()
service(ServletRequest req,ServletResponse res)
String getServletInfo()
destroy()
GenericServlet 使编写 Servlet 变得更容易。它提供生命周期方法 init 和 destory 的简单实现,要编写一般的 Servlet,只需重写抽象 Servlet 方法即可
1、抽象类源码:
service是抽象方法,子类必须重写
2、继承抽象类写法:
package com.ha.servlet;
import javax.servlet.GenericServlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class GenServlet extends GenericServlet {
public void service(ServletRequest ServletRequest, ServletResponse ServletRespense) throws IOException {
System.out.println("hello world");
}
}
3、配置文件增加两行:
4、运行
httpServlet是继承GenericServlet的基础上进一步的拓展。
提供将要被子类化以创建适用于web站点的 HTTP servlet 的抽象类。HttpServlet的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
doGet,如果 servlet 支持 HTTP GET 请求
doPost,用于 HTTP POST 请求
doPut,用于 HTTP PUT 请求
doDelete,用于 HTTP DELETE 请求
1、抽象类源码
抽象类进行了重写,给不同的处理方式,进行不同的请求
2、代码
因为有中文,所以在cmd命令行编译Java的时候要加上这一句话 -encoding utf8
package com.ha.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HttpsServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
System.out.println("hello HttpsServlet");
}
/*
* HttpsServlet要求所有的service请求要跟Http协议有关,
* 下面的普通的service 和 上面的重载的 不同之处有
* 一、修饰符不同
* public是接口提供的
* protected是HttpServlet重载的
* 二、参数列表不同
* HttpServletRequest、HttpServletResponse
* ServletRequest、ServletResponse
*/
/*
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
}
*/
}
3、配置文件增加两行:
4、运行
5、HttpServlet的特点
根据不同的请求方式处理不同的结果
package com.ha.servlet;
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 HttpsServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("这是get请求过来的内容");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("这是post请求过来的内容");
}
}
浏览器访问的方式是get,
配置文件中的名字不能够相同,不然tomcat会报错
地址配置错误(com.ha.servlet. ...)或者访问的时候输入的URL(.../hss)错误也会报404错误
1、配置
my
com.ha.servlet.myServet
my
/servlet
gs
com.ha.servlet.GenServlet
gs
/gs
hs
com.ha.servlet.HttpsServlet
hs
/hs
2、url-pattern定义匹配规则,取值说明:
精确匹配 /具体的名称 只有url路径是具体的名称的时候才会触发Servlet
后缀匹配 *.xxx 只要是以.xxx结尾的就匹配出发Servlet
通配符匹配 /* 匹配所有请求,包含服务器的所有资源
通配符匹配 / 匹配所有请求,包含服务器的所有资源,不包括.jsp
例1
浏览器中输入:
http://localhost:8080/myweb/abc.action
会执行HttpsServlet.class这个文件
例2
浏览器中输入:
http://localhost:8080/myweb/[任何内容]
会执行HttpsServlet.class这个文件
如果输入的是gs等精确访问的内容,那么就去执行GenServlet.class这个文件
例3
使用通配符匹配 /,在浏览器中输入:
http://localhost:8080/myweb/aaa.jsp
不会执行对应的.class文件
3、load-on-startup
(1)元素标记容器是否应该在web应用程序启动的时候就加载这个servlet。
(2)它的值必须是一个整数, 表示servlet被加载的先后顺序。
(3)如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
(4)如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小, servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。
my
com.ha.servlet.myServet
0
my
/servlet
gs
com.ha.servlet.GenServlet
1
gs
/gs
hs
com.ha.servlet.HttpsServlet
2
hs
/hs
运行结果:
注意:这个函数只执行一次
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("GenServet init");
}