一、摘要
1、servlet的基本情况介绍(与JSP对比)。
2、servlet的用途。
3、servlet的生命周期(面试常考)。
4、servlet实例(例1——构建servlet类,获取JSP页面的请求并把响应返回到客户端。例2——load-on-startup Servlet例子,实现每隔5秒显示系统时间的功能)
二、什么是servlet?
Servlet是java编写的服务器端程序,用于动态扩展服务器端的程序,采用请求——响应模式提供web服务。(百度百科上说的比较简洁:servlet是在服务器上运行的小程序。)
三、servlet的用途
主要作用:用来处理客户端的请求。(采用的模式是:客户端请求——服务器接收请求并转至servlet——servlet根据客户端请求,生成响应并传给服务器——服务器将响应返回给客户端)
自从MVC规范出现以后,servlet的职责慢慢确定:仅仅作为控制器,不在扮演视图层的角色。
四、Servlet和JSP的区别
本质方面:JSP的本质就是servlet,开发人员把写好的JSP置于web容器,web容器最终会将JSP转换为servlet。
用途方面:在J2EE中,servlet作为一个java类,在java代码中输出HTML的美容,主要用于业务逻辑层,用于实现业务逻辑;JSP在HTML中嵌入java脚本,是为了实现表现层而设计的。(用途方面)
五、servlet生命周期
首先:servlet的生命周期不是由程序员控制,而是由web容器(如tomcat)控制的。
1、 创建机制
(1)客户第一次请求某个servlet时:系统创建servlet实例。
(2)web应用启动时:立即创建servlet实例(load-on-startup Servlet)。
2、生命周期
(1)创建servlet实例。
(2)web容器调用servlet的init()方法,对servlet进行初始化。
(3)servlet初始化之后,将一直存在,供客户端请求使用。
(4)关闭web应用的时候(通常情况下),web容器调用servlet的destroy()方法,销毁servlet。
六、servlet实例
例1:
1、程序目录:
servlet类:FirstServlet.java
配置文件:web.xml
资源jar包:servlet-api.jar(位于tomcat的lib文件夹下,如果使用Annotion来配置servlet的话,需要使用tomcat7及以上版本的servlet-api.jar包)
辅助JSP文件:index.jsp(用来给sevelet传数据)
2、FirstServlet.java
package ygy;
import javax.servlet.*;
import javax.servlet.http.*;
//import javax.servlet.annotation.*;
import java.io.*;
//@WebServlet(name = "firstServlet", urlPatterns = { "/firstServlet" })
public class FirstServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
//客户端的响应方法,使用该方法可以响应客户端所有类型的请求
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,java.io.IOException
{
//设置解码方式
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charSet=GBK");
//获取name的请求参数值
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String national = request.getParameter("country");
//获取页面输出流
PrintStream out = new PrintStream(response.getOutputStream());
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet测试</title>");
out.println("</head>");
out.println("<body>");
out.println("您的名字:" + name + "<hr/>");
out.println("您的性别:" + gender + "<hr/>");
out.println("您来自的国家:" + national + "<hr/>");
out.println("</body>");
out.println("</html>");
}
}
3、web.xml
<?xml version="1.0"encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>ygy.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/aa</url-pattern>
</servlet-mapping>
</web-app>
4、index.jsp(用来代替myeclipse创建web工程后自动生成的index.jsp文件即可)
<%@ page language="java"import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP'index.jsp' starting page</title>
<meta http-equiv="pragma"content="no-cache">
<meta http-equiv="cache-control"content="no-cache">
<meta http-equiv="expires"content="0">
<meta http-equiv="keywords"content="keyword1,keyword2,keyword3">
<meta http-equiv="description"content="This is my page">
</head>
<body>
<form id="form1"method="post" action="/Servlet/aa">
用户名:
<br />
<input type="text"name="name">
<hr />
性别:
<br />
男:
<input type="radio"name="gender" value="男">
女:
<input type="radio"name="gender" value="女">
<hr />
来自的国家:
<br />
<select name="country">
<option value="中国">
中国
</option>
<option value="美国">
美国
</option>
<option value="俄罗斯">
俄罗斯
</option>
</select>
<hr />
<input type="submit"value="提交">
<input type="reset"value="重置">
</form>
</body>
</html>
5、运行效果(作者web项目名称为Servlet)
打开浏览器,输入http://localhost:8080/Servlet 进入表单填写页面;
填写好后,点击提交,页面将转换到http://localhost:8080/Servlet/aa,显示的就是FirstServlet.java中的servlet类。
例2:
1、程序目录:
servlet类: Load_on_startup.java
配置文件:web.xml
资源jar包:servlet-api.jar(位于tomcat的lib文件夹下,如果使用Annotion来配置servlet的话,需要使用tomcat7及以上版本的servlet-api.jar包)
2、Load_on_startup.java
package ygy;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Date;
@WebServlet(loadOnStartup = 1)
public class Load_on_startup extends HttpServlet {
private static final long serialVersionUID = 1L;
public void init(ServletConfig config) throws ServletException {
super.init(config);
//其作用是每隔5秒在Console窗口中显示系统时间,只要web项目启动,就开始运行。
Timer timer = new Timer(5000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(new Date());
}
});
timer.start();
}
}
3、web.xml
<?xml version="1.0"encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>load_on_startup</servlet-name>
<servlet-class>ygy.Load_on_startup</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
5、运行效果
在console控制台,每隔5秒显示系统的时间。