论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
Tomcat与Java Web开发技术详解连载之二
 作者:佚名     2007-3-14 17:11:05        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

2.2.4 部署HTML文件

在helloapp目录下加入index.htm文件,这个文件仅仅用来显示一串带链接的字符"Welcome to HelloApp", 它链接到login.jsp文件。以下是index.htm文件的代码:
















<html>
<head>
<title>helloapp</title>
</head>
<body >
<p><font size="7">Welcome to HelloApp</font></p>
<p><a href="login.jsp 
language=English">English version </a>
</body>
</html>

访问index.htm的URL为 http://localhost:8080/helloapp/index.htm,该页面的显示结果如图2-3所示。

图2-3 index.htm

2.2.5 部署JSP

接下来,创建两个JSP文件,其中一个是login.jsp(参见例程2-1),它显示登录页面,要求输入用户名和口令,这个页面链接到一个名为DispatcherServlet的Servlet。 还有一个JSP文件是hello.jsp(参见例程2-2),这个JSP被DispatcherServlet调用,显示Hello页面。JSP的语法将在第4章详细讨论,本节侧重于介绍JSP的发布过程。这两个JSP文件都应放在helloapp目录下。

例程2-1 login.jsp

<html>
<head>
  <title>helloapp</title>
</head>
<body >
<br>
<form name="loginForm" method="post" 
action="dispatcher">
<table>
<tr>
<td><div align="right">User Name:</div></td>
<td> <input type="text" name="username"></td>
</tr>
<tr>
<td><div align="right">Password:</div></td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="Submit" 
name="Submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>

例程2-2 hello.jsp

<html>
<head>
  <title>helloapp</title>
</head>
<body>
  <b>Welcome: <%= request.getAttribute("USER") %></b>
</body>
</html>

login.jsp中生成了一个loginForm表单,它有两个字段:username和passoword。访问login.jsp的URL为http://localhost:8080/helloapp/login.jsp,它生成的页面如图2-4所示。

图2-4 login.jsp网页

2.2.6 部署Servlet

下面,创建一个Servlet文件,名为DispatcherServlet.java(参见例程2-3),它调用HttpServletRequest对象的getParameter方法读取客户提交的loginForm表单数据,获取用户名和口令,然后将用户名和口令保存在HttpServletRequest对象的属性中,再把请求转发给hello.jsp。

例程2-3 DispatcherServlet.java

package mypack;

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

public class DispatcherServlet 
extends HttpServlet
{

  private String target = "/hello.jsp";

  public void init(ServletConfig config)
    throws ServletException
	{
    super.init(config);
  }

  public void doGet
  (HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException
	{

    // If it is a get request 
	forward to doPost()
    doPost(request, response);
  }

  public void doPost
  (HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException
	{

    // Get the username from the request
    String username = 
	request.getParameter("username");
    // Get the password from the request
    String password =
	request.getParameter("password");

    // Add the  user to the request
    request.setAttribute
	("USER", username);
    request.setAttribute
	("PASSWORD", password);

    // Forward the request 
	to the target named
    ServletContext context
	= getServletContext();

    System.out.println
	("Redirecting to " + target);
    RequestDispatcher dispatcher =
      context.getRequestDispatcher(target);
    dispatcher.forward(request, response);
  }

  public void destroy()
  {
  }
}

编译并发布DispatcherServlet的步骤如下。

(1)编译DispatcherServlet.java。编译时,需要将Java Servlet API的JAR文件(servlet-api.jar)设置为classpath,servlet-api.jar文件位于/common/lib目录下。

(2)把编译出来的class文件拷贝到/helloapp/WEB_INF/classes目录下。DispatcherServlet.class的存放位置为/helloapp/WEB_INF/classes/mypack/DispatcherServlet。

在本例中,声明将DispatcherServlet类放在包mypack下,所以应该在/WEB_INF/classes目录下先创建子目录/mypack,然后在子目录下放DispatcherServlet.class文件。

(3)接下来在web.xml中为DispatcherServlet类加上元素。

<web-app>

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>mypack.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/dispatcher</url-pattern>
</servlet-mapping>

</web-app>

元素的属性描述参见表2-4。

在本例配置中,没有为DispatcherServlet设置load-on-startup属性,因此当Web应用启动时,Servlet容器不会加载这个Servlet,只有当Web客户首次访问这个Servlet时才加载它。

表2-4 元素的属性

属 性 说 明
servlet-name 定义Servlet的名字
servlet-class 指定实现这个Servlet的类
init-param 定义Servlet的初始化参数 (包括参数名和参数值), 一个元素中可以有多个
load-on-startup 指定当Web应用启动时, 装载Servlet的次序。 当这个值为正数或零, Servlet容器先加载数值小的Servlet, 再依次加载其他数值大的Servlet。 如果这个值为负数或者没有设定, 那么Servlet容器将在Web客户首次 访问这个Servlet时加载它

元素用来指定映射。是指访问Servlet的相对URL路径。

根据以上属性,访问DispatcherServlet的URL为http://localhost:8080/ helloapp/dispatcher,DispatcherServlet接受到客户请求后,再把请求转发给hello.jsp,hello.jsp生成的页面如图2-5所示。

图2-5 DispatcherServlet调用hello.jsp生成的网页

2.2.7 部署JSP Tag Library

最后,在Web应用中加入Tag Library(标签库)。Tag Library向用户提供了自定义JSP标签的功能。我们将定义一个名为mytaglib的标签库,它包含了一个简单的hello标签,这个标签能够将JSP页面中所有的解析为字符串"hello"。以下是创建和发布mytaglib标签库的步骤。

(1)编写用于处理hello标签的类HelloTag.java,例程2-4列出了HelloTag.java的源代码。

例程2-4 HelloTag.java

package mypack;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

public class HelloTag extends TagSupport
{
    public void HelloTag()
	{ 
	}

    // Method called when the
	closing hello tag is encountered
    public int doEndTag() throws JspException
	{

        try {

            // We use the pageContext to get a Writer
            // We then print the text string Hello
            pageContext.getOut().print("Hello");
        }
        catch (Exception e) 
		{

            throw new JspTagException(e.getMessage());
        }
        // We want to return SKIP_BODY because
		this Tag does not support
        // a Tag Body
        return SKIP_BODY;
    }

    public void release()
	{

        // Call the parent's release 
		to release any resources
        // used by the parent tag.
        // This is just good practice
		for when you start creating
        // hierarchies of tags.
        super.release();
    }
}

编译HelloTag.java时,需要将jsp-api.jar文件添加到classpath中,这个JAR文件位于/common/lib目录下。编译生成的HelloTag.class存放位置为/WEB-INF/classes/mypack/HelloTag.class。

(2)创建Tag Library的描述文件mytaglib.tld文件,在这个文件中定义mytaglib标签库和hello标签。这个文件存放位置为/WEB-INF/mytaglib.tld。例程2-5列出了mytaglib.tld的源代码。

例程2-5 mytaglib.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
        PUBLIC "-//Sun Microsystems,
		Inc.//DTD JSP Tag Library 1.1
		//EN"
	"http://java.sun.com/j2ee/dtds
	/web-jsptaglibrary_1_1.dtd">

<!-- a tag library descriptor -->

<taglib>
  <tlibversion>1.0</tlibversion>
  <jspversion>1.1</jspversion>
  <shortname>mytaglib</shortname>
  <uri>/mytaglib</uri>

  <tag>
    <name>hello</name>
    <tagclass>mypack.HelloTag</tagclass>
    <bodycontent>empty</bodycontent>
    <info>Just Says Hello</info>
  </tag>

</taglib>

(3)在web.xml文件中加入元素,例程2-6列出了修改后的web.xml文件。

例程2-6 加入元素的web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC
  '-//Sun Microsystems, Inc.
  //DTD Web Application 2.3//EN'
  'http://java.sun.com/j2ee
  /dtds/web-app_2_3.dtd'>

<web-app>

   <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>mypack.DispatcherServlet
		</servlet-class>
   </servlet>

   <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/dispatcher</url-pattern>
   </servlet-mapping>

 <taglib>
    <taglib-uri>/mytaglib</taglib-uri>
    <taglib-location>/WEB-INF/mytaglib.tld
	</taglib-location>
  </taglib>

</web-app>

中包含两个属性。其中指定Tag Library标示符;指定Tag Library的描述文件(TLD)的位置。

(4)在hello.jsp文件中加入hello标签。首先,在hello.jsp中加入引用mytaglib的taglib指令:

<%@ taglib uri="/mytaglib" prefix="mm" %>

以上taglib指令中,prefix用来指定引用mytaglib标签库时的前缀,修改后的hello.jsp文件参见例程2-7。

例程2-7 加入Tag标签的hello.jsp

<%@ taglib uri="/mytaglib" prefix="mm" %>
<html>
<head>
  <title>helloapp</title>
</head>
  <b><mm:hello/> :
  <%= request.getAttribute("USER") %></b>
</body>
</html>

hello.jsp修改后,再依次访问index.htm→login.jsp→DispatcherServlet→hello.jsp,最后生成的网页如图2-6所示。

图2-6 带hello标签的hello.jsp生成的网页

(T117)

本文节选自由飞思图书授权《Tomcat与Java Web开发技术详解》


责任编辑:lss
  相关新闻
MCSD.NET的考试70-300
我的MCSE考试经验
MCSD.NET 之70-300考试心得精彩分享
JSFToolbox--用Dreamweaver开发JSF
MCSE认证考试全程心得
MCDBA培训教材
WebWork拦截器(Interceptor)使用方法
给MCSE备考者的五点忠告
专家指点:MCP考试新题型一一剖析
艰难PASS216,完成MCSE!!!
MCSD.NET的考试70-300
我的MCSE考试经验
给MCSE备考者的五点忠告
艰难PASS216,完成MCSE!!!
MCSD.NET 之70-300考试心得精彩分享
专家指点:MCP考试新题型一一剖析
别说你的起点不够高-一名MCT的心里话
通过MCDBA证书来验证你的SQL Server水平
关于MCSE的考试顺序的一些看法
[分享]我的MCSE学习心得体会
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号