Servlte开发入门
Servlet应用程序的体系结构图
Servlet是使用Java语言编写的运行在服务器端的程序,一般指的是任何实现了Servlet接口的类。依赖包javax.servlet.api.jar
。
针对Servlet接口提供有两个默认实现,GenericServlet和HTTPServlet
- GenericServlet是抽象类,只提供了部分实现,没有实现HTTP请求处理。除了service()方法外,其他方法都已经实现。
- HTTPServlet继承GenericServlet的所有方法,并为HTTP中的请求提供了具体操作方法。
实现第一个Servlet程序
编写HelloServlet类继承GenericServlet,重写service()方法。Servlet使用输出流来产生响应,我们获取输出流PrintWriter对象并向客户端发送字符数据。
public class HelloServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
PrintWriter writer = servletResponse.getWriter();
writer.println("hello world!");
}
}
在web.xml文件中我们编写mapping映射。
- 根据访问的地址/hello在
<servlet-mapping>
中找到对应的<url-pattern>
- 就能得到
<servlet-name>
是HelloServlet - 根据
<servlet-name>
的值是HelloServlet找到对应的<servlet>
- 得到
<servlet-class>
是servlet.HelloServlet
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
将我们的web项目部署到tomcat上,此时如果我们访问http://localhost:8081/javaweb01/hello就能得到hello world!
使用HttpServlet类
由于大多数Web应用都通过HTTP协议和客户端进行交互,所以提供了一个HttpServlet类专门用于创建用于HTTP协议的Servlet,它重写了service()方法,根据用户请求方式不同,定义了相应的doXXX()方法处理用户请求,我们继承HttpServlet类后只需要重写对应的doXXX()方法即可。
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.println("hello world!");
}
}
默认请求方法为Get,所以我们只需要重写doGet()方法。如果我们没有重写对应请求方式的doXXX()方法会报405错误。
Servlet的生命周期
Servlet接口定义了5个抽象方法,其中init(),service(),destroy()这3个方法可以表现Servlet的生命周期。
- init()方法:初始化阶段,容器接收到请求时检查内存中是否存在Servlet,有就用没有就创建Servlet并调用此方法初始化,通过一个ServletConfig向Servlet传递初始化配置信息。
- service()方法:运行阶段,容器会为请求新建request和response对象作为参数传递给Servlet的service()方法。负责响应用户请求,在整个生命周期中被多次调用。
- destroy()方法:销毁阶段,在服务器关闭或Servlet对象被移除时,Servlet对象会被销毁并调用这个方法,用来释放被Servlet对象占用的资源。
虚拟路径的映射
-
Servlet的多重映射
Servlet的多重映射指的是同一个Servlet可以被映射成多个虚拟路径。我们配置多个<servlet-mapping>
元素其中的<url-pattern>
不同,但都指向一个<servlet-name>
-
映射路径使用通配符
可以在Servlet映射的路径中使用通配符*
。通配符有两种格式:
1)格式为*.扩展名
,例如*.html
匹配以.html
结尾的所有URL地址。
2)格式为/*
,例如/abc/*
匹配以/abc
开头的所有URL地址。 -
缺省Servlet
如果Servlet的映射路径是/
那么这个Servlet就是当前Web应用的缺省Servlet,如果请求在web.xml文件中找不到匹配的映射路径,就会交给缺省Servlet处理。
本文来自博客园,作者:独游空想家,转载请注明原文链接:https://www.cnblogs.com/linzhikai/p/16508207.html