一、Servlet技术
a) 什么是servlet
1、Servlet是JavaEE规范之一,规范就是接口
2、Servlet是JavaWeb三大组件之一,分别是Servlet程序,Filter过滤器和Listener监听器
3、Servlet是运行在服务器上的一个java小程序,它可以通过 HTTP(超文本传输协议)接收客户端发送过来的请求,并响应数据给客户端。
b)如何创建Servlet程序
1、编写一个类去实现Selvlet接口
2、实现service方法,处理请求,并响应数据
3、到web.xml中去配置servlet程序的访问地址
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--servlet标签给tomcat配置servlet程序-->
<servlet>
<!--<servlet-name>给servlet程序起一个别名 一般是类名-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是servlet程序的全类名-->
<servlet-class>h220907.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,当前配置的地址是给哪个servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--url-pattern标签配置访问地址
/ 斜杠在服务器解析的时候表示地址为http://ip:port/工程路径
/hello 表示地址为http://ip:port/hello
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
c)Servlet程序的生命周期
1、执行Servlet构造器方法
2、执行init初始化方法
第1、2步是在第一次访问的时候,创建servlet程序会调用
3、执行service方法
每次访问都会调用
4、执行destroy销毁方法
在web工程停止的时候调用
d)GET和POST请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service方法:helloServlet被访问了!");
//类型转换 把 servletRequest向下转为他的子类HttpServletRequest,从而调用getmethod方法
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//获取请求的方式 get or post
String method = httpServletRequest.getMethod();
if("GET".equals(method)){
doGet();
}else if("POST".equals(method)){
doPost();
}
}
通过ServletRequest servletRequest向下转型为其子类HttpServletRequest,调用getmethod方法,获取当前请求的类型。
e)通过继承HttpServlet实现Servlet程序
一般在实际项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序。
1、编写一个类继承HttpServlet
2、根据业务需要,重写doPost或doGet方法
3、到web.xml中配置Servlet程序的访问地址
public class HelloServlet2 extends HttpServlet {
//doGet方法在get请求的时候调用
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello, get请求!");
}
//doPost方法在post请求的时候调用
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello, post请求!");
}
}
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>h220907.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
f)使用IDEA创建Servlet程序
直接new servlet
自动生成doPost和doGet方法。
h)Servle类的继承体系
Interface Servlet Servlet接口,只是负责定义 Servlet 程序的访问规范
|
Class GenericServlet 实现了 Servlet接口,做了很多空实现
| 并持有一个ServletConfig类的引用,并对ServletConfig的使用做一些方法
|
Class HttpServlet 实现了service方法,并实现了请求的分发技术
| String method = req.getMethod()
| GET POST
| doGet() doPost() 负责抛异常,说不支持GET/POST请求
自定义的Servlet 程序 重写 doGet() doPost() 方法