Top

JAVA SERVLETJSP DAY01

  1. 安装和配置Tomcat
  2. 手动开发第一个Web项目
  3. 使用工具开发Web项目
  4. 输出请求数据包中的内容
  5. 向客户端输出中文

1 安装和配置Tomcat

1.1 问题

分别在Linux和windows系统下实现Tomcat的安装和配置。

1.2 步骤

在Linux系统下安装、配置Tomcat

步骤0:安装JDK及配置JAVA_HOME、PATH等环境变量

到Oracle官方网站下载JDK的Linux专用安装程序后,执行安装,假定安装路径为“usr/local/jdk1.7”。安装结束后配置环境变量的过程如图-1所示,在终端中输入“gedit /home/soft01/.bashrc”,其代表的含义是使用gedit编辑soft01这个用户下的环境变量。

/

图– 1

在文件中输入图-2所示的第9,10,11行代码

/

图 - 2

其含义为:

具体完整代码为:

export JAVA_HOME=/usr/local/jdk1.7
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/
tools.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

在终端中输入“java –version“,查看是否配置成功,结果如图-3所示:

/

图 - 3

步骤一:下载及解压Tomcat

在tomcat.apache.org网站下载Tomcat7.0程序的安装包。Linux系统选择tar.gz格式。如图-4所示:

图 -4

下载后的文件如图-5所示:

图– 5

将此文档解压到“/home/soft01/”或其子目录下,假定本次解压位置为“/home/soft01/java”,如图-6所示:

图–6

解压后的结果如图-7所示,保证tomcat-apache-7.0.6文件夹下面包含Tomcat文件。

图 -7

步骤二:启动Tomcat

在终端中输入如下命令:“cd /home/soft01/java/apache-tomcat-7.0.6/bin”进入到tomcat的安装目录的bin下面。如图-8所示,可以通过“pwd”命令查看当前位置是否正确。

图– 8

继续在终端中输入“sh startup.sh”命令,如图-9所示:

图– 9

为检验Tomcat的确已经启动成功,打开浏览器输入http://localhost:8080查看结果。如图-10所示为启动成功。

图 - 10

步骤三:关闭Tomcat

在终端中输入“sh shutdown.sh”命令,停止Tomcat服务。如图-11:

图– 11

再次在浏览器中输入“http://localhost:8080”查看页面效果,则显示“该页无法显示”的提示。

在Windows系统下安装、配置Tomcat

步骤0:安装JDK及配置JAVA_HOME、PATH等环境变量

到Oracle官方网站下载JDK的Windows专用安装程序后,执行安装,假定安装路径为“d:\java\jdk1.7”,则配置环境变量过程如下:

“我的电脑”右键“属性”(高级系统设置(环境变量。如图-12,图-13,图-14所示:

图 - 12

图 -13

图– 14

对“系统变量”做以下三个操作:

新建系统变量,变量名为“JAVA_HOME”,变量值为“D:\java\jdk1.7”。即JDK的安装路径的根路径。如图-15所示:

图– 15

新建系统变量,变量名为“CLASSPATH”,变量值为“.;%JAVA_HOME%\lib;%JAVA_HOME\

lib\tools.jar”。第一个为“.”点,代表当前路径,即在当前路径下寻找类,后面为安装的jdk中的jar文件的路径,中间用“;“分号隔开(Linux系统用”:“冒号分隔)如图-16所示。

图– 16

修改原有系统变量“Path“,将光标移动到变量值的最前面(注意,一定不要删除原有的变量值),添加”%JAVA_HOME%\bin;”。一定要以分号结束,作为与原有值的分隔标识。安装的Tomcat的bin目录下有很多可执行程序和命令,记录这个地址后,不管在任何目录下输入java和javac命令,系统都能找到对应的命令并执行。

图– 17

通过以上三个环境变量的设置以后,为了验证JDK是否配置成功,则通过在命令行中输入命令来检测。在“运行”窗口中输入“cmd”进入到命令行界面,输入“java -version”查看输出结果,如果提示“java version 1.7.X_XX”则代表配置成功。如图-18所示。

图 - 18

步骤一:下载及解压Tomcat

在apache网站的指定下载页面,选择适合Windows操作系统的Tomcat版本后下载。如图-19所示。

图 - 19

将下载的文件解压缩到指定路径。假定本次解压路径为“d:\java\tomcat7”,结果如图-20所示。注意“tomcat7”下面不再包含子文件夹,直接包含tomcat的各文件。

图 -20

步骤二:启动Tomcat

使用命令行工具,输入“d:”切换到D盘,再输入“cd d:\java\tomcat7\bin“进入到tomcat文件夹中的bin目录下,输入“startup”命令即可启动Tomcat。如图-21,22所示。

图– 21

图 - 22

打开浏览器输入”http://localhost:8080“验证启动成功。如图-23。

图 - 23

步骤三:关闭Tomcat

在命令行中输入“shutdown”命令可以关闭Tomcat。如图-24所示。

图 - 24

2 手动开发第一个Web项目

2.1 问题

使用文本编辑工具开发第一个Servlet程序。

2.2 步骤

开发Servlet程序的步骤如下

  1. 1.编写java源文件,文件中的类必须实现Servlet接口或继承HttpServlet类
  2. 2 . 编译java源文件,生成class文件
  3. 3.打包,将编译后的文件按照规定目录结构进行整理
  4. 4 . 部署,将目录结构复制到Web容器的指定位置
  5. 5 . 启动Web容器,输入符合规范的地址访问Servlet

不管是在Linux还是Windows系统下,按照以上五步即可完成Web程序的开发,区别只在于系统不同则实现对应步骤的命令不同。

Linux下开发第一个Web程序

步骤一:编写源文件

新建一个HelloServlet.java的文件,假定保存路径为“/home/soft01/java”。如图-25.

图– 25

文件的代码如图-26所示:

图 - 26

步骤二:编译HelloServlet.java文件

进入终端,输入“cd /home/soft01/java”命令,切换当前目录到HelloServlet.java文件所在的位置;输入“javac –d . HelloServlet.java”命令进行编译,-d参数代表编译结果的保存位置,“.”点符号代表当前目录,中间都有空格隔开,即编译HelloServlet.java文件,并将结果保存在当前目录;由于java源文件中使用了javax.servlet.*以及javax.servlet.http.*这两个包中的类,而这些类存在于我们解压的Tomcat目录中lib下的servlet-api.jar文件中,因此为了能够正确编译,需要在javac命令中添加“-cp”参数,说明一下这个servlet-api.jar文件所在的位置,所以javac命令调整为如下内容:

“javac –cp /home/soft01/java/apache-tomcat-7.0.6/lib/serlvet-api.jar –d . HelloServlet.java”

查看编译结果,会发现在当前目录中多了一个名字叫web的文件夹(源代码中有package web这句代码)及文件夹下的HelloServlet.class文件。

编译过程及结果如图-27,图-28所示:

图– 27

图– 28

步骤三:打包

打包即将工程各组件、文件以规定的目录结构进行整理。首先是在“/home/soft01/java”目录下创建整个应用的一个文件夹,暂定名称叫firstweb(可变),firstweb内包含一个叫做“WEB-INF”的文件夹,且名字不可变,“WEB-INF”下面包含一个叫做“classes”的文件夹,将刚刚编译好包含HelloServlet.class的web文件夹整体拷贝到“classes”文件夹下;同时,在“WEB-INF“文件夹下与“classes”同级别,添加一个名字叫做“web.xml”(名称不可变)的文件。具备了“WEB-INF”、“classes”、“web.xml”之后,打包步骤基本完成。生成的目录结构如图-29所示。

图– 29

编写web.xml文件时,内容可以参考tomcat安装目录下webapps/examples/WEB-INF

/web.xml文件。拷贝文件第一行,<web-app>、<servlet>、<servlet-mapping>节点即可,修改文件内容,与图-30保持一致。其中,两个servlet-name的名字要一致,servlet-class填写的是编译后的HelloServlet这个类的完整名称,带上包名。url-pattern内的值一定更要以斜杠“/”开头。

图 - 30

步骤四:部署

部署工程就是将整个应用拷贝到tomcat的webapps这个文件夹下面。拷贝完的结果如图-31所示。

图 - 31

步骤五:启动容器,访问Servlet查看结果

在终端中,输入“cd /home/soft01/java/apache-tomcat-7.0.6/bin”命令,切换到tomcat的bin目录;再输入“sh startup.sh”命令,启动Tomcat。

打开浏览器,输入“http://localhost:8080/firstweb/hello”回车,查看页面输出效果图-32所示。

图– 32

Windows下开发第一个Web程序

步骤一:编写源文件

新建java源文件,假定保存路径为“d:\java”,内容如图-33所示。

图 - 33

步骤二:编译HelloServlet.java文件

进入到命令行工具,输入命令“d:”切换盘符,输入命令“cd java”进入到HelloServlet.java源文件所在的目录,输入命令“javac –cp d:\java\tomcat7\lib\servlet-api.jar –d . HelloServlet.java”编译java文件到当前目录下。命令及输出结果如图-34,图-35所示。

图– 34

图– 35

步骤三:打包

按照如下结构进行整理应用的目录结构。

图– 36

详细结构可以参考图-29。web.xml文件内容参考图-30。

步骤四:部署

将整个firstweb文件夹拷贝到tomcat安装路径下的webapps文件夹下。如图-37所示。

图 - 37

步骤五:启动容器,访问Servlet查看结果

进入到命令行工具,输入“d:”切换盘符,输入“cd java\tomcat7\bin”进入到tomcat的工具目录,输入“startup”回车,启动tomcat。如图-38,图-39所示。

图– 38

图– 39

打开浏览器,输入“http://localhost:8080/firstweb/hello”查看运行结果。

图 - 40

2.3 完整代码

本案例的完整代码如下所示:

HelloServlet.java代码:

package web;

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

public class HelloServlet extends HttpServlet{
	public void service(HttpServletRequest request,
									HttpServletResponse response)
									throws ServletException,IOException{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<h1>Hello Servlet</h1>");
		out.close();
	}
}

web.xml文件代码:

<?xml version="1.0" encoding="ISO-8859-1"?>
<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"
  metadata-complete="true">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

</web-app>

3 使用工具开发Web项目

3.1 问题

使用MyEclipse进行Web应用的开发。

3.2 步骤

在第一次使用MyEclipse进行Web应用的开发之前,需要将MyEclipse与解压后的Tomcat进行关联,也就是完成服务器的配置。

步骤一:为MyEclipse添加服务器配置

依据图-41至图-45所示步骤完成服务器配置

图– 41

图– 42

图– 43

图– 44

图– 45

配置成功后结果如图-46所示。

图– 46

可以通过点击“Start”按钮启动关联到的Tomcat,观察Console输出窗口会出现“Server startup in XXXX ms”的提示信息,代表服务器配置成功并能够正确启动。通过点击“Stop Server”按钮可以停止服务。

步骤二:新建Web工程

通过点击菜单“File”(“New”(“Web Project”新建一个Web工程,填写工程名信息如图-47后点击确定,生成工程。

图 - 47

步骤三:创建java类

在工程文件的“src”上右键,new一个class文件,填写包名“web”,填写类名“HelloServlet”后点击“Finish”,如图-48所示。

图– 48

类文件内容参考图-33。

步骤四:配置web.xml文件

点击工程中“WEB-INF”节点下的web.xml文件,点击屏幕下方的“Source”按钮切换编辑视图,改写文件内容如图-49所示。

图– 49

步骤五:部署工程到Tomcat

点击工具栏中的/图标进入到部署工程的界面,按照图-50至图-52所示顺序依次选择要部署的项目、部署到哪个服务器之后点击OK按钮完成部署。

图– 50

图– 51

图– 52

步骤六:启动服务器查看运行结果

点击工具栏中的/服务器图标下面“Tomcat7.X”对应的“Start”按钮启动服务器,观察控制台输出窗口中显示成功启动的信息后,打开浏览器,输入“http://localhost:8080/firstweb/hello“,查看运行结果。同图-40显示一样。

3.3 完整代码

与“手动开发第一个Web项目“的完整代码相同。

使用MyEclipse开发Web项目的过程与手动编写完成的步骤是一样的,只是将一些步骤变成了自动完成,如编译、打包

4 输出请求数据包中的内容

4.1 问题

获取请求数据包中的消息头中各键值对的名称和值,提交方式,协议,请求资源路径等信息,并输出到控制台中。

4.2 方案

客户端发来的请求数据包到达服务器端以后会被解释为HttpServletRequest类型的对象,数据包中的数据会被存储到该类型的对象之中,所以借助于该对象提供的getHeaderNames(),getHeader(),getMethod(),getRequestURI()等方法即可获取这些信息。

4.3 步骤

实现此案例按如下步骤进行。

步骤一:新建web工程

点击菜单“文件”(“新建”(“Web Project”,填写信息如图-53所示,一般填写完工程名以后其他信息默认不用修改,部署的应用名会与工程名保持一致,但如果修改了部署名称以后,那么部署之后访问时注意资源路径要与修改后的名称保持一致。

图 - 53

步骤二:新建类RequestInfo.java

新建一个位于web包下面的RequestInfo.java的类,使得该类继承自HttpServlet抽象类,重写service()方法,代码如下。

package web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestInfo extends HttpServlet{
		public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
			
			
		}
}

步骤三:调用request对象的方法获取消息头信息

package web;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ReqInfoServlet extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{		
		//获取所有消息头的名称
		Enumeration  e = request.getHeaderNames();		
		while(e.hasMoreElements()){
			//遍历Enumeration获取每一个消息头的名称
			String headerName  = e.nextElement().toString();
			//输出消息头的名-值对儿信息
			System.out.println(headerName+":"+request.getHeader(headerName));
		}		
		System.out.println("请求方式:"+request.getMethod());		
		System.out.println("请求的协议种类:"+request.getProtocol());		
		System.out.println("请求资源路径:"+request.getRequestURI());		
		System.out.println("请求的路径信息:"+request.getRequestURL());		
		System.out.println("请求的Servlet路径:"+request.getServletPath());
	}
}

步骤四:修改web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	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_2_5.xsd">
	<servlet>
		<servlet-name>reqInfoServlet</servlet-name>
		<!-- 类名要写完整,包含包名,注意大小写 -->
		<servlet-class>web.ReqInfoServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>reqInfoServlet</servlet-name>
		<url-pattern>/reqInfo</url-pattern>
	</servlet-mapping>
</web-app>

步骤五:部署

点击工具栏上的“部署”图标,选择要部署的工程及“Add”按钮,选择要部署到的目标服务器后点击Finish。如图-54:

图– 54

提示部署成功后点击OK,如图-55:

图– 55

步骤六:启动服务,访问应用

通过点击工具栏中服务器图标,选择Tomcat7.X,点击Start启动服务器。打开浏览器在地址栏中输入“http://localhost:8080/servlet01/reqInfo”查看结果。如图-56:

图 - 56

4.4 完整代码

ReqInfoServlet.java完整代码如下:

package web;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ReqInfoServlet extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		
		//获取所有消息头的名称
		Enumeration  e = request.getHeaderNames();		
		while(e.hasMoreElements()){
			//遍历Enumeration获取每一个消息头的名称
			String headerName  = e.nextElement().toString();
			//输出消息头的名-值对儿信息
			System.out.println(headerName+":"+request.getHeader(headerName));
		}
		
		System.out.println("请求方式:"+request.getMethod());		
		System.out.println("请求的协议种类:"+request.getProtocol());		
		System.out.println("请求资源路径:"+request.getRequestURI());		
		System.out.println("请求的路径信息:"+request.getRequestURL());		
		System.out.println("请求的Servlet路径:"+request.getServletPath());
	}
}

web.xml文件完成代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	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_2_5.xsd">
	<servlet>
		<servlet-name>reqInfoServlet</servlet-name>
		<!-- 类名要写完整,包含包名,注意大小写 -->
		<servlet-class>web.ReqInfoServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>reqInfoServlet</servlet-name>
		<url-pattern>/reqInfo</url-pattern>
	</servlet-mapping>
</web-app>

5 向客户端输出中文

5.1 问题

实现访问Servlet之后,服务器端能够返回带有中文信息的页面。

5.2 方案

通过response对象修改响应数据包中“content-type”消息头,从而设置浏览器的解码方式为支持中文信息的方式。

5.3 步骤

步骤一:新建类ResInfoServlet.java

在web包下新建类ResInfoServlet.java,在service方法中添加设置响应头的代码。如下所示:

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResInfoServlet extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("能够输出中文信息的Servlet");
		out.close();
	}
}

步骤二:修改web.xml,配置Servlet

在web.xml文件中增加对ResInfoServlet的配置。代码如下所示:

<servlet>
			<servlet-name>resInfoServlet</servlet-name>
		<servlet-class>web.ResInfoServlet</servlet-class>
	</servlet>	
	<servlet-mapping>
		<servlet-name>resInfoServlet</servlet-name>
		<url-pattern>/resInfo</url-pattern>
	</servlet-mapping>

步骤三:重新部署工程,访问应用

重新部署工程后,在浏览器中输入合法地址查看页面结果如下:

图 - 57

5.4 完整代码

ResInfoServlet.java文件的完整代码如下:

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ResInfoServlet extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("能够输出中文信息的Servlet");
		out.close();
	}
}

web.xml文件的完整代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	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_2_5.xsd">
	<servlet>
		<servlet-name>reqInfoServlet</servlet-name>
		<!-- 类名要写完整,包含包名,注意大小写 -->
		<servlet-class>web.ReqInfoServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>resInfoServlet</servlet-name>
		<servlet-class>web.ResInfoServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>reqInfoServlet</servlet-name>
		<url-pattern>/reqInfo</url-pattern>
	</servlet-mapping>	
	<servlet-mapping>
		<servlet-name>resInfoServlet</servlet-name>
		<url-pattern>/resInfo</url-pattern>
	</servlet-mapping>
</web-app>