Servlet简介
Servlet就是一个Java接口
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet优缺点
Servlet简单说是服务端运行的脚本
优点:
1. Servlet是纯Java语言,擅长于处理流程和业务逻辑
缺点:
1. web.xml配置量太多,不利于团队开发;
2. Servlet具有容器依赖性,不利于单元测试;
3. Servlet处理的请求很局限
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:
性能明显更好。
Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
Servlet 是独立于平台的,因为它们是用 Java 编写的。
服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
Servlet的思想
总的来说serlvet就是个类,是基于http协议的,运行在web服务器中的程序,当web服务器启动的时候,serlvet进行初始化,并且只能初始化一次。
servlet是有生命周期的,init是初始化,service是处理服务,destroy是销毁。servlet可以接受来自表单或者地址的请求,根据不同的请求动态的输出效果。或者serlvet可以作为中转器,根据不同的请求,处理业务逻辑然后跳转到不同的页面,就相当于一个MVC的雏形。
工作模式
1、客户端请求该 Servlet;
2、加载 Servlet 类到内存;
3、实例化并调用init()方法初始化
(该Servlet;该函数用于初始化该servlet 该函数只是会被调用一次,当用户第一次访问该servlet的时候被调用)
4、service()
(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions());
(service 函数用于处理业务逻辑、程序员应当把业务逻辑代码写在这里、该函数在用户每次访问servlet的时候都会被调用、ServletRequest 对象用于获得客户端信息,ServletResponse 对象用于向客户端返回信息(客户端可以理解为浏览器))。
5、destroy();
(关闭Tomcat 或者说关机之后都会调用这个函数)
6、加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet;
7、Server 创建一个 Servlet的实例;
8、第一个客户端的请求到达 Server;
9、Server 调用 Servlet 的 init() 方法(可配置为 Server 创建 Servlet 实例时调用,在 web.xml 中 标签下配置 标签,配置的值为整型,值越小 Servlet 的启动优先级越高);
10、一个客户端的请求到达 Server;
11、Server 创建一个请求对象,处理客户端请求;
12、Server 创建一个响应对象,响应客户端请求;
13、Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数;
14、service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;
15、service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如 doGet() 或 doPost() 或程序员自己开发的新的方法;
16、对于更多的客户端请求,Server 创建新的请求和响应对象,仍然激活此 Servlet 的 service() 方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象),当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。
servlet工作流程
servlet功能:通过浏览器传数据到tomcat容器中的servlet,该servlet将接到的信息返回给浏览器,并在浏览器中显示出来。
1)浏览器访问:http://localhost:8080/jdcz/
2)Tomcat收到并返回给浏览器/jdcz/index.jsp
3)用户在index.jsp页面中输入信息
4)Tomcat收到index.jsp页面提交的表单(信息)由于index.jsp的 form action配的是jdcz/deptServlet,符合web.xml中配的第一条url-pattern,对应的servlet-name是deptServlet。web.xml中配的servlet块中,servlet-name为DeptServlet的servlet-class是com.zrrd.servlet.contorller.DeptServlet,
5)tomcat找到处理表单请求的java类,com.zrrd.servlet.contorller.DeptServlet,并请将请求分发给它
6)DeptServlet 处理请求并返回response
(其中,将页面的中文转码用的是:
request.setCharacterEncoding(“UTF-8”);
接值:
request.getParameter(“deptno”);
调,一般调用service层
存:
request.setAttribute(“list”, list);
转
请求转发:
request.getRequestDispatcher(“/jsp/dept/query.jsp”).forward(request, response);
再查询:
response.sendRedirect(request.getContextPath()+”/cx”);)
7)Tomcat将DeptServlet.class处理过的response返回给浏览器
8)浏览器收到response并在页面显示
Servlet运行过程
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
②装载并创建该Servlet的一个实例对象。
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。