Servlet技术
什么是Servlet
1·他是JavaEE规范之一,规范就是接口。
2·是javaweb三大组件之一。三大组件分别是Servlet程序、Fliter过滤器、Listener监听器。
3·是运行在服务器 上的一个Java小程序。可以接收客户端发送过来的请求,并响应给客户端。
手动实现Servlet程序
1.编写一个类去实现Servlet接口
2.实现service方法,处理请求并响应数据
3.到web.xml中去配置Servlet程序
<!--servlet标签给Tomcat配置servlet程序-->
<servlet>
<!--servlet-name标签是为servlet程序起一个别名(一般是类名) -->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是servlet程序的全类名-->
<servlet-class>com.duanjiao.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给servlet程序配置一个访问地址-->
<servlet-mapping>
<!--servlet-name标签是告诉服务器我当前配置的地址给哪一个servlet程序使用 -->
<servlet-name>HelloServlet</servlet-name>
<!--url-pattern标签配置访问地址 <br/>
/ 斜杠在服务器解析的时候,表示地址为http://ip:port/工程路径 <br/>
/hello 表示地址为http://ip:port/工程路径/hello <br/>
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
Servlet程序常见错误
约定大于配置!!!
常见错误1:url-pattern配置的地址必须以斜杠开头!!!
常见错误2:servlet-name两个必须相同!!!
常见错误3:servlet-class标签配置全类名配置错误
url地址到Servlet程序的访问
Servlet 生命周期
1.执行servlet构造器方法
2.执行init()初始化方法
第一二步是在第一次访问的时候创建Servlet程序会调用。
3.执行service方法来处理客户端的请求。
第三步每次访问都会调用
4.执行destory销毁方法
第四步在web工程停止的时候才会执行调用。
Servlet请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3.service === Hello Servlet被访问了!");
//类型转换(因为它有getmethod()方法)
HttpServletRequest httpservletRequest = (HttpServletRequest) servletRequest;
//获取请求的方式
String method = httpservletRequest.getMethod();
// System.out.println(method);
if ("GET".equals(method)){
doGet();
}else if ("POST".equals(method)){
doPost();
}
}
/*
做get请求的操作
*/
public void doGet(){
System.out.println("get请求");
System.out.println("get请求");
}
/*
做post请求的操作
*/
public void doPost(){
System.out.println("post请求");
System.out.println("post请求");
}
@Override
public String getServletInfo() {
return null;
}
通过继承HttpServlet类实现Servlet程序
一般在实际项目开发中,都是使用继承HttpServlet类实现Servlet程序。
1.编写一个类去继承HttpServlet类;
2.根据业务需要重写doget或doPost方法;
3.到web.xml中配置Servlet程序的访问地址。
public class HelloServlet2 extends HttpServlet{
/**
* doGet() 在get请求的时候调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet方法");
}
/**doPost()在post请求的时候调用
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost方法");
}
}
web.xml中添加
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.duanjiao.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
使用IDEA菜单创建Servlet程序
web.xml中只需要配置
<servlet-mapping>
<servlet-name>HelloServlet3</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
类自动生成
public class HelloServlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet3的doGet方法");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet3的doPost方法");
}
}
Servlet类的继承体系
-
Servlet接口,只是负责定义Servlet程序的访问。
-
GenericServlet类实现了Servlet接口,做了很多空实现。并持有一个ServletConfig类的引用,并对ServletConfig的使用做一些方法。
-
HttpServlet抽象类实现了service方法,并实现了请求的分发处理
String method = req.getMethod();GET POST doGet() doPost() | <负责抛出异常,说不支持请求>
-
自定义的servlet程序,我们只需要根据自己的业务需要去重写doGet()或doPost()方法即可。