第一个Javaweb应用程序
一、Javaweb应用程序结构
一个 web 应用程序是由一组 Servlet,HTML 页面,类,以及其它的资源组成的运行在 web 服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在
组成 web 应用程序的这些文件要部署在相应的目录层次中,根目录代表整个 web 应用程序的”根”
通常将 web 应用程序的目录放在 webapps 目录下,在 webapps 目录下的每一个子目录都是一个独立的 web 应用程序,子目录的名字就是 web 应用程序的名字,也就是 web 应用程序的“根”。用户通过 web 应用程序的”根”来访问 web 应用程序中的资源
Servlet 规范中定义了 web 应用程序的目录层次:
两点说明:
①WEB-INF目录下的classes和lib目录都可以存放Java的类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下的类
②WEB-INF 是一个特殊的目录(所有字母都要大写)。这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对于Servlet代码是可见的
二、部署并启动 tomcat 服务器
1. 解压 apache-tomcat-6.0.16.zip 到一个非中文目录下
2. 配置一个环境变量. java_home(指向 JDK 安装的根目录) 或 jre_home
3. 通过双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat, 启动服务器
4. 可以在浏览器中输入 localhost:8080 来检验 Tomcat 安装是否正确.
5. 若已经启动了一个 Tomcat 应用, 若再启动同一个 Tomcat 应用, 会抛出异常: java.net.BindException: Address already in use: JVM_Bind:8080,因为端口已经被占用了,可以通过修改 server.xml 文件中的配置信息来修改 Tomcat 服务器的端口号:
<Connector port="8989" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
把 port 的值改为其他的端口号即可.
6. 为了可以在任意目录下启动 Tomcat 服务器,可以把 D:\apache-tomcat-6.0.16\bin 添加到 path 下添加成功后, 若在任意目录下通过 startup 启动 Tomcat 服务器, 会有提示:
The CATALINA_HOME environment variable is not defined correctly This environment variable is needed to run this program
即: 要求设置 CATALINA_HOME 这个环境变量
7. 设置 CATALINA_HOME 环境变量:通过阅读 startup.bat 批处理文件, 可知 CATALINA_HOME 环境变量下有一个 bin 目录,而 bin 目录又有一个 catalina.bat 文件, 由此可知 CATALINA_HOME 指向的应该是 Tomcat 安装的根目录,于是把 Tomcat 的根目录设为CATALINA_HOME 环境变量.,此时即可以在 任意 目录下通过 startup.bat、shutdown.bat 启动、关闭 Tomcat 服务器.
8.继续阅读 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?
catalina 命令有如上的可选参数.
run: 在 catalina 同一个命令行窗口下启动服务器.
start: 开启一个新窗口启动服务器
stop: 关闭服务器.
三、第一个 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 目录下
5. 在 WebContent 目录下新建一个 JSP 文件:
<%@page import="me.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:8989/helloworld/hello.jsp 即可看到命令行的打印信息
四、配置任意目录下的Web应用程序
在Web服务器中可以配置虚拟目录,而虚拟目录所对应的真实目录可以在任何路径下。
在Tomcat服务器中,主要在 XML 配置文件中通过<Context>元素的设置来完成的。一个<Context>元素就表示一个Web应用程序,运行在特定的虚拟主机中。
<Context>元素是<Host>元素的子元素,可以在conf\server.xml文件中设置Context元素。
<Context>元素的常用属性
<Context>元素是<Host>元素的子元素,可以在conf\server.xml文件中设置Context元素。
使用docBase属性指定Web应用程序的真实路径。将属性reloadable设置为true,Tomcat在运行时会自动监测Servlet类的改动,如果发现有类被更新,Tomcat服务器将自动重新加载该Web应用程序。这样,在开发时,就不需要频繁重启Tomcat了
还可以在conf目录下依次创建Catalina\localhost目录,然后在localhost目录下为 test 这个Web应用程序建立 test.xml 文件,编辑这个文件输入以下内容
从Tomcat 5开始,不建议直接在server.xml文件中配置<Context>元素,因为server.xml文件作为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属性。
因此,我们可以在 conf 目录下依次创建 catalina\localhost 目录,然后在 localhost 目录下为 test 这个Web应用程序建立 test.xml 文件,编辑这个文件输入以下内容
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="E:\\Java\\Source\\hello\\java-1\\firstWebApp\\WebContent" reloadable="true"/>
如果,您对我的这篇博文有什么疑问,欢迎评论区留言,大家互相讨论学习。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博文感兴趣,可以关注我的后续博客,我是【AlbertRui】。转载请注明出处和链接地址,欢迎转载,谢谢!