一、JavaWeb应用的概念
- 在Sun的JavaServlet规范中,对JavaWeb应用作了这样定义:“JavaWeb应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet容器中运行。”
- JavaWeb应用中可以包含如下内容:
- Servlet
- JSP
- 实用类
- 静态文档如HTML、图片等
- 描述Web应用的信息(web.xml)
二、Servlet容器的概念
- Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。
- Servlet容器也称为javaWeb应用容器,或者Servlet/JSP容器。
- 目前最流行的Servlet容器软件包括:
- Tomcat
- Resin
- J2EE服务器(如Weblogic)中也提供了内置的Servlet容器。
三、Tomcat
- Tomcat是一个免费开放源代码的Servlet容器,它是Apache软件基金会的一个顶级项目,由Apache,Sun和其他一些公司及个人共同开发而成.
- Tomcat的目录结构
- 运行Tomcat
(1). 配置Java_home(指向JDK安装的根目录) 或 jre_home
(2). 双击bin目录下的startup.bat文件
(3). 在地址栏中输入http://localhost:8080/ 来检验Tomcat安装是否正确。
(4). 若已经启动了一个Tomcat应用,若再启动一个Tomcat应用,会抛出异常:
java.net.BindException:Address alreadly in use : JVM_Bind:8080 因为端口已经被占用。 - 关闭Tomcat & 配置Tomcat 的端口号
(1). 双击bin目录下的shutdown.bat文件关闭Tomcat服务器
(2). 修改Tomcat默认的端口号:
- 打开conf目录下的server.xml文件
- 修改端口号
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把port的值改为其他的端口号即可。
- 为了可以再任意目录下启动Tomcat 服务器
(1). 把D:\apache-tomcat-6.0.16\bin 添加到path下
(2). 添加成功后,若在任意目录下通过startup启动Tomcat服务器,会有提示:
The CATALINA_HOME enviroment variable is not defined correctly
This environment variable is needed to run this program
即:要求设置CATALINA_HOME这个环境变量 - 设置CATALINA_HOME环境变量
(1). 通过阅读startup. bat批处理文件,可知CATALINA_ HOME环境变量下有一个bin目录, .而bin目录又有一个catalina.bat 文件,由此可知CATALINA_ HOME指向的应该是Tomcat安装的根目录
(2). 于是把Tomcat的根目录设为CATALINA_ HOME环境变量。
(3). 此时即可以在任意目录下通过startup. bat、shutdown.bat 启动、关闭Tomcat 服务器.| - 继续阅读startup.bat 文件,发现启动tomcat服务器的是catalina.bat文件,在命令行窗口直接输入catalina, 提示如下:
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina
version What version of tomcat are you running?
catlina 命令有如上的可选参数.
run:在catalina同一个命令行窗口下启动服务器。
start:开启一个新窗口启动服务器
stop:关闭服务器
- Tomcat的管理程序
- Tomcat提供一个管理程序:manager,用于部署到Tomcat服务器中的web应用程序
- 要访问manager web 应用程序,需要添加具有管理员权限的账号,编辑conf目录下的tomcat-users.xml文件,添加manager角色,设置用户名和密码
<?xml version = '1.0' encoding = 'utf-8'?>
<tomcat-users>
<role rolename = "manager"/>
<user username = "tomcat" password = "" role = "manager"/>
</tomcat-users>
四、Web程序
- Web程序结构(1)
几点说明:
- WEB-INF目录下的classes和lib目录都可以存放Java的类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录存在同名的类,起作用的将是classes目录下的类。
- WEB-INF是一个特殊的目录(所有字母都要大写)。这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对于客户端来说,这个目录是不可见的。但该目录下的内容对于Servlet代码是看见的。
-
Web程序结构(2)
-
第一个WEB应用程序:开发,并部署到Tomcat服务器下运行
(1). 在Eclipse新建一个Java Project。
(2). 在Java项目下创建WEB开发的目录结构。
-WebContent
-WEB-INF
-classes(编译后的class文件必须放在该目录下。)
-lib
-web.xml(从apache-tomcat-6.0.16\webapps\docs\WEB-INF 中复制过来,可以不做修改)
html 页面
JSP 页面
图片等等
(3). 在src 下新建一个Person类。
package com.atguigu.test;
public class Person {
public String getPersonInfo() {
return "person info...";
}
}
(4). 手工的Person类对应的class文件(含包)复制到 classes 目录下。
可以通过修改默认的输出目录达到自动把编译好的class 放到 classes目录下
右击文件----->点击Bulid Path---->点击Configure Build Path---->点击Source---->点击Browse找到 …/WebContent/WEB-INF/classes目录下
(5). 在WebContent新建一个JSP
<%@ page import='com.atguigu.test.Person' %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%
Person person = new Person();
System.out.print(person.getPersonInfo());
%>
(6). 把WebContent目录复制到Tomcat的webapps目录下,并改名:helloworld(也可以不修改名称)
(7). 在浏览器的地址栏中输入:http://localhost:8080/helloworld/hello.jsp 即可看到命令行的打印信息。
(8). 配置任意下的Web应用程序:
在conf 目录下依次创建catalina\localhost目录,然后在localhost目录下为test这个Web应用程序建立test.xml文件,编辑这个文件输入一下内容。
<?xml version="1.0" encoding="UTF-8"?>
<Content path="/test2" docBase="D:\\eclipse-workspace\\firstWebApp\\WebContent" reloadable="true" />
五、配置任意目录下的Web应用程序
(1)配置任意目录下的Web应用程序
元素的常用属性
属性 | 描述 |
---|---|
docBase | 指定Web应用程序的文档基目录或者WAR文件的路径名。可以描述指定目录的或WAR文件的绝对路径名。也可以 指定相对于Host元素的appBase目录的路径名。该属性是必须的 |
path | 指定Web应用程序的上下文路径。在一个特定的虚拟机中,所有的上下文路径都必须是唯一的。如果是指定一个上下文路径为空字符集(" "),则定义了这个虚拟主机的默认Web应用程序,负责处理所有的分配给其他Web应用程序的请求 |
reloadable | 如果设置为true,Tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变。如果有类被更新,Tomcat服务器将自动重新加载Web应用程序。这个特性在应用程序的开发阶段非常有用。但是它需要额外的运行时开销,所以在产品发布时不建议使用。该属性默认值是false |
unpackWAR | 如果为true,Tomcat在运行web应用程序前将展开所有压缩的Web应用程序。默认值是true |
(2)配置任意目录下的Web应用程序
- <Context>元素是<Host>元素的子元素,可以在conf\server.xml文件中设置Context元素。
- 使用docBase属性指定Web应用程序的真实路径。将属性reloadable设置为true , Tomcat在运行时会自动监测Servlet类的改动,如果发现有类被更新, Tomcat服务器将自动重新加载该Web应用程序。这样,在开发时,就不需要频繁重启Tomcat了。
<Host name = "localhost" appBase = "webapps"
unpackWARs = "true" autoDeploy = "true"
xmlValidation = "false" xmlNamespaceAware = "false">
<Context path="/test" docBase="c:/test" reloadable="true"/>
</Host>
(3)配置任意目录下的Web应用程序
- 还可以在conf目录下依次创建Catalina\localhost目录,然后在localhost目录下为test这个Web应用程序建立test.xml文件,编辑这个文件输入以下内容
<Content path="/test" docBase="c:/test" reloadable="true" />
- 从Tomcat 5开始,不建议直接在server.xmI文件中配置<Context>元素,因为server.xm|文件作为Tomcat的主要配置文件,一且Tomcat启动后,将不会再读取这个文件,因此无法在Tomcat服务器启动时发布Web应用程序。如果在其他地方配置<Context>元素,那么在Tomcat运行时,也可以发布Web应用程序。
- 从Tomcat 5.5开始,在**\conf\Catalina\localhost**目录下创建XML配置文件来配置Web应用程序,Tomcat将以XML文件的文件名将作为Web应用程序的上下文路径,而不理会在<Context>元素的path属性中指定的上下文路径是什么。由于Tomcat 5.5之后的版本是以XML配置文件的文件名作为Web应用程序的上下文路径的,因此在配置<Context>元素时,可以不使用path属性。