第一篇:jsp教案8
湖南城市学院教师备课纸
第 8 次课
题 JAVA服务器小程序(ServLet)之Servlet链、编程应用
目的要求 掌握Servlet链的含义及编程应用 教学重点 ServLet链的构建与Shtml的使用 教学难点 ServLet链的构建 教学课时 4(含2课时上机)
教学方法 讲解、示例与启发式教学相结合 教学内容和步骤 8.1 Servlet链
8.1.1 什么是servlet链
Servlet链,它是JvavServer体系结构的高级特征之一, 与UNIX和DOS命令中的管道类似,你也可以将多个servlet以特定顺序链接起来。在servlet链中,一个servlet的输出被当作下一个servlet的输入,而链中最后一个servlet的输出被返回到浏览器。8.1.2表过滤器(Table Filter)我们以表过滤器看看如何编写一个可以被用于链接的servlet,这个表过滤器servlet将分析另一个servlet的输出,查找含有特殊表格式指令的HTML注释,这些指令包括表有多少列、是否显示表头等等。在该表格式指令之后的所有行将会被格式化成一个HTML表格。这样,链中的前一个servlet只要简单地将数据用逗号分割,数据就可以一行一行地直接输出了,而无须将这些数据格式化成HTML表格。同样,当你决定修改这个表格的格式时,你就不必修改产生数据的servlet,而直接修改这个表过滤器servlet就可以了。
这个表过滤器servlet实现了HTTP服务的方法。首先,它必须重复(echo)上一个servlet中设置的头信息。这些信息包括内容类型、调用的URL、远程主机等等。TableFilter.java显示了设置这些头信息的必要代码。
例1:TableFilter.java
package javaservlets.samples;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TableFilter extends HttpServlet
{
/**
*
Performs an HTTP service request
* @param req The request from the client
* @param resp The response from the servlet
*/
public void service(HttpServletRequest req,HttpServletResponse resp)
throws ServletException, java.io.IOException
{
// Get all headers set by the previous servlet and echo them
java.util.Enumeration e = req.getHeaderNames();
while(e.hasMoreElements()){
String header =(String)e.nextElement();
String value = req.getHeader(header);
resp.setHeader(header, value);
} // 如下述代码所示,接下来的步骤是取得一个可以从前一个servlet的输出流中讲读取数据的输入流,如果该输入流的内容类型是某种我们可以分析的类型(如HTML),我们就继续下一步骤;否则,我们就从输入流中读出所有字节并毫不修改地把它们写回浏览器。
// Get the input and output streams
ServletInputStream in = req.getInputStream();
ServletOutputStream out = resp.getOutputStream();
// Only process if this is a recognized MIME type
String type = req.getContentType();
if(type.equals(“text/html”)||
type.equals(“text/table”)||
type.equals(“application/x-www.xiexiebang.command, process
// the line
if(inTable){
// Search for the end of the table
if(s.startsWith(””);
// Output the table
out.println(“Symbol,Element”);
out.println(“Ac,Actinium”);
out.println(“Ag,Silver”);
out.println(“Al,Aluminum”);
//Etc...out.println(“Y,Yttrium”);
out.println(“Yb,Ytterbium”);
out.println(“Zn,Zinc”);
out.println(“Zr,Zirconium”);
out.println(“”);
// Wrap up
out.println(“