drp——servlet

一、Servlet容器、Servlet接口、Servlet实现类

客户端通过浏览器,以可以交互的Html页面,对Web服务器发送请求。Web应用程序发布、运行在服务器上。Web服务器通过调用Web应用中的服务(方法),实现客户请求。并通过Web服务器,返回响应结果。过程如下:

              

.net,确实将应用程序发布在了IIS中。得以让用户进行访问。同样JavaWeb中也一样,DrpWeb服务器是Tomcat。以下针对JavaWeb应用进行讨论。

 

Web服务器是如何调用Web应用程序的呢?——中介方Servlet接口。Servlet接口是一组标准,它规定了:

1.Web服务器可以访问任意一个Web应用中实现Servlet接口的类。

2.Web应用中被Web服务器调用的程序代码在Servlet接口的实现类中。

 

此时把发布、运行JavaWeb应用的Web服务器称为Servlet容器。以Tomcat作为Servlet容器为例:


                 

二、Servlet接口

Servlet中定义了5个方法。其中3个方法都由Servlet容器来调用。容器在Servlet的生命周期的不同阶段调用特定的方法。

1.init(ServletConfigconfig):负责初始化Servlet对象。容器在创建Servlet对象后,就会调用该方法。

2.service(ServletRequestreq,ServletResponse res):负责响应客户的请求,为客户提供响应服务。当容器接收到客户端要求访问特定Servlet对象的请求时,就会调用该Servlet对象的service()方法。

3.destory():负责释放Servlet对象占用的资源。当Servlet对象结束生命周期时,容器会调用此方法。

 

三、Servlet的生命周期

Servlet的生命周期也由Servlet容器来控制。Servlet的生命周期可以分为3个阶段。

1.初始化阶段

   (1)加载Servlet

(2)创建ServletConfig对象

(3)创建Servlet对象

(4)调用Servlet对象的init(ServletConfig config)方法。

2.运行阶段

这个阶段,Servlet随时响应客户端的请求。当Servlet容器接收到要求访问特定Servlet的客户请求时,Servlet容器会创建针对于这个请求的ServeltRequestServletResponse对象。然后调用响应Servlet对象的service()方法。Service()方法从ServletRequst对象中获得客户请求信息并处理该请求,在通过ServletResponse对象生成响应结果。当Servlet容器把Servlet生成的响应结果发送给客户,Servlet容器就会销毁ServletRequest对象和ServletResponse对象。

3.销毁阶段

Web应用程序被终止时,Servlet容器会先调用Web应用中所有Servlet对象的Destory()方法。然后再销毁这些Servlet对象。

 

四、实例应用——根据日期范围查询学生

1.UML图分析

            

2.查询页面——query_student_con.jsp

<%@ page language="java" contentType="text/html;charset=GBK"%>
<html>
	<head>
		<title>学生信息</title>
	</head>
	<body>
		<form action="SearchStudentServlet" method="post">
			出生日期:<input type="text" name="beginDate">至<input type="text" name="endDate">
			<input type="submit" value="查询学生">
		</form>
	</body>
</html>

结果页面——student_list.jsp

<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="com.bjpowernode.exam.model.*"%>
<%@ page import="com.bjpowernode.exam.manager.*"%>
<html>
	<head>
		<title>学生信息</title>
		<style type="text/css">
		 /*表格宽度为1px,实线,黑色*/
		   table{
			    border:1px solid black;   
			    border-collapse:collapse; 		
		   }

		   td {
			    border:1px solid black;   
			    border-collapse:collapse; 		
		   }
		   
		</style>		
	</head>
	<body>
		<table border="1">
			<tr>
				<td>学生代码</td>
				<td>姓名</td>
				<td>性别</td>
				<td>出生日期</td>
				<td>联系电话</td>
				<td>家庭住址</td>
				<td>班级名称</td>
				<td>年龄</td>
			</tr>
			<%
				//List<Student>  studentList = (List)request.getAttribute("student_list");
				List<Student>  studentList = (List)session.getAttribute("student_list");
				for (Iterator<Student> iter=studentList.iterator(); iter.hasNext();) {
					Student student = iter.next();
			%>
			<tr>
				<td><%=student.getStudentId()%></td>
				<td><%=student.getStudentName()%></td>
				<td><%=student.getSex()%></td>
				<td><%=new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthday())%></td>
				<td><%=student.getContactTel()%></td>
				<td><%=student.getAddress()%></td>
				<td><%=student.getClasses().getClassesName()%></td>
				<%
					long b = 1000L*60L*60L*24L*365L;
					long a = System.currentTimeMillis() - student.getBirthday().getTime();
				%>
				<td><%=a/b%></td>
			</tr>
			<%
				}
			%>
		</table>
	</body>
</html>

3.Web.xml配置

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
	<servlet>
		<servlet-name>SearchStudentServlet</servlet-name>
		<servlet-class>SearchStudentServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>SearchStudentServlet</servlet-name>
		<url-pattern>/SearchStudentServlet</url-pattern>
	</servlet-mapping>
	
</web-app>

4.servlet代码

import java.text.*;
import java.util.*;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

import com.bjpowernode.exam.model.*;
import com.bjpowernode.exam.manager.*;

public class SearchStudentServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)	
	throws ServletException, IOException {
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		String sBeginDate = request.getParameter("beginDate");
		String sEndDate = request.getParameter("endDate");
		
		Date beginDate = new Date();
		Date endDate = new Date();
		try {
			beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);
		 	endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);
		 }catch(Exception e) {
			e.printStackTrace();		 
		 }	 
		
		StudentManager studentManager = new StudentManagerImpl();
		List<Student> studentList = studentManager.findStudentList(beginDate, endDate);
		
		//将studentList放到session中
		HttpSession session = request.getSession();
		session.setAttribute("student_list", studentList);
		
		//重定向,不会共享request
		response.sendRedirect(request.getContextPath() + "/student_list.jsp");
	}
}

总结:

    通过以上介绍、实例,明白了Servlet容器、Servlet接口、Servlet之间的关系。它们更像是餐馆招聘服务员。餐馆就是Servlet容器,Servlet接口就是中介,Servlet就是等待上岗的钟点工。餐馆需要钟点工上菜、布菜、刷盘子。钟点工在中介登记了可以做什么样的工作,这样餐馆只需要告诉中介自己需要什么样的人就可以了。

发布了106 篇原创文章 · 获赞 78 · 访问量 29万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章