上一篇:JavaWeb学习总结07–Tomcat
下一篇:JavaWeb学习总结09–Servlet(2)
Servlet: server applet
Servlet(Server Applet),全称Java Servlet,servlet是运行在服务器端的Java程序,Servlet本质上就是一个用Java语言编写接口,定义了Java类被浏览器访问到(tomcat识别)的规则。其主要功能是用来交互式的浏览和修改数据,增加Web的动态效果。在使用时,我们往往通过自定义一个类,来实现Servlet接口,复写方法。
关于Servlet
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。当客户机将请求信息发送到服务器时,服务器可以将请求信息发送给Servlet,并让Servlet进行响应。通过这个方式,Servlet可以实现许多功能:
- 1.创建并返回一个基于客户请求实质的、动态内容的完整HTML页面;
- 2.创建可嵌入到现有HTML页面中的HTML片段
- 3.读取客户端发送过来的隐藏数据
- 4.读取客户端发送过来的显示数据
- 5.与其它服务器资源进行通信
- 6.通过状态码和响应头向客户端发送隐藏数据
Servlet的生命周期
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理。
Servlet的生命周期在它被装入Web服务器内存时开始,在Web服务器终止或重新装入Servlet时结束。一个Servlet程序在Web服务器上的运行过程经历了:装入、初始化、调用、销毁四个阶段,它的生命周期在第二个阶段开始,在第四个阶段终止。
生命周期方法:
载入(init)
,Web服务器加载和实例化Servlet的工作,该工作可以在Web服务器启动时到Web服务器受到请求时,之间任一时刻完成,之后进行初始化工作,这些工作在整个生命周期中只执行一次。
服务(service)
,从请求对象处获取响应信息,进行处理之后再次响应给客户机, 每次客户机请求时,Service方法都会被调用一次。
销毁(destroy)
:当服务器不再需要Servlet对象时,或者需要载入新的Servlet对象实例时,Web服务器会调用destroy方法执行销毁(一般只有在服务器正常关闭时执行),只执行一次。
public class ServletDemo implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Hello Servlet");
}
}
快速入门
在我们开发过程中,实现Servlet的方法有3种,分别是实现Servlet接口、继承GenericServlet类和继承HttpServlet类,
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,HttpServlet是对http协议的一种封装,我们可以定义类继承HttpServlet,然后复写doGet/doPost方法。(在实际应用中,继承HttpServlet应用居多)
如果我们想要发送一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成:编写一个Java类,实现servlet接口,把开发好的Java类部署到web服务器中这两步。
- 搭建步骤:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口(public class ServletDemo1 implements Servlet)
3. 实现接口中的抽象方法
4. web.xml中配置Servlet
定义MyServlet类,通过继承HttpServlet类来实现Servlet接口
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//........................
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//........................
}
}
配置web.xml文件,访问路径为/servlet
<!--配置Servlet -->
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>cn.ly.web.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
- 执行原理:
1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
2. 查找web.xml文件,是否有对应的标签体内容。
3. 如果有,则在找到对应的全类名
4. tomcat会将字节码文件加载进内存,并且创建其对象
5. 调用其方法
注意:Servlet3.0之后,我们可以通过使用注解来代替web.xml配置,我们只需要在MyServlet类种的上方添加一个@WebServlet("/servlet")即可(适用于单个Servlet的配置)
@WebServlet相关配置
urlpartten:Servlet访问路径,一个Servlet可以定义多个访问路径 : @WebServlet({"/a1","/a2","/a3"})
路径定义规则:
- 1. /xxx:路径匹配
- 2. /xxx/xxx:多层路径,目录结构
- 3. *.do:扩展名匹配
WebServlet的相关属性
属性名 | 描述 |
---|---|
urlPatterns | Servlet的访问URL |
value | Servlet的访问URL |
description | Servlet的描述信息 |
displayName | Servlet的显示名称 |
initParams | Servlet的初始化参数 |
name | Servlet的名称 |
asyncSupported | 声明Servlet是否支持异步操作模式 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form name="from" action="/servlet" method="POST">
用户名:<input name="username"></br>
密码: <input type="submit" value="提交"></br>
<input type="submit" name="submit" value="提交"></br>
<input type="reset" name="reset" value="重置"></br>
</form>
</body>
</html>