分享
 
 
 

Tomcat与Java Web开发技术详解连载之二

王朝java/jsp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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生成的网页

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有