1 什么是JavaWeb
SUN公司的Servlet规范对JavaWeb应用做了这样的定义:“JavaWeb 应用由一组Servlet/JSP,HTML文件,和相关的java类,以及其他可以被绑定的资源构成,它可以再各种供应商提供的符合Servlet规范的Servlet容器中运行。”
从中可以看出JavaWeb应用应该包含如下内容:
- Servlet组件:标准Servlet接口的实现类,运行在服务器端,包含了被Servlet容器的动态调用的程序代码
- JSP组件:包含Java程序代码的JHTML文档,运行再服务器端,当客户端请求访问JSP文件时,Servlet容器先把它编译成Servlet类,然后动态调用它的程序代码
- 相关的Java类:与Web应用相关的Java类,如PoJo类
- 静态文档: 存放在文件系统中,如Html文件,图片文件和声音文件等
- web.xml:javaweb应用配置文件,采用XML格式,该文件必须再Web应用的WEB-INF子目录下
2 Tomcat简介
tomcat是一个优秀的Servlet容器,Tomcat本身完全由Java语言编写,,是Apache开源软件组织的一个软件项目。
2.1 Tomcat的安装(windows下)
- 先安装JDK(省略)
- 解压apache-tomcat-9.0.24.tar.gz文件,比如我将其解压后,其实际的目录为:D:\developers\javadeveloper\SOFT\apache-tomcat-9.0.14
- 创建环境变量 CATALINA_HOME, 值为上述Tomcat的安装目录D:\developers\javadeveloper\SOFT\apache-tomcat-9.0.14,然后再path中追加变量 ;%CATALINA_HOME%\bin
2.2 Tomcat的目录结构
目录 | 描述 |
---|---|
/bin | 存放再Windows平台和Linux平台上启动和关闭Tomcat的脚本文件 |
/conf | 存放Tomcat服务器的各种配置文件,其中最重要的配置文件时server.xml |
/lib | 存放Tomcat服务器及Web应用都可以访问的JAR文件 |
/log | 存放Tomcat的日志文件 |
/webapps | 在Tomcat上发布JavaWeb应用时,默认把Web应用文件放在此目录 |
/work | Tomcat的工作目录,Tomcat在运行时把生成的一些工作文件放在此目录下,比如,在默认情况下,Tomcat把编译的JSP而生成的Servlet类文件放在此目录下 |
2.3 启动Tomcat并测试Tomcat的安装
如果你的CATALINA_HOME设置成功,那么只需要在控制台输入startup.bat即可开启tomcat服务器。
在浏览器中输入localhost:8080即可访问tomcat主页:
2.4 运行脚本介绍
事实上不管startup.bat还是shutdown.bat批处理文件,其最终的执行的其实都是catalina.bat脚本,catalina.bat脚本允许输入命令行参数,参数如下表
命令行参数 | 作用 |
---|---|
start | 在新的DOS窗口中启动Tomcat服务器 |
run | 在当前DOS窗口中启动Tomcat服务器 |
debug | 在跟踪模式下启动Tomcat服务器 |
embedded | 在嵌入式模式下启动Tomcat服务器 |
stop | 关闭tomcat服务器 |
2.5 Tomcat的组成结构
我们先看看Tomcat的配置文件server.xml的配置文件的结构:
<Server >
<Service >
<Connector />
<Connector />
<Engine >
<Host >
<context></context>
</Host>
</Engine>
</Service>
</Server>
: 顶层元素,位于整个配置文件的最顶层,可以包含一个或者多个Service元素 : 包含一个 元素,以及一个或者多个 元素。 : 连接器类元素: 用于代表介于客户与服务服务器之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应结果返回给客户。 : Service只包含一个Engine元素,处理该Service中所有Connector连接收到的客户请求 : Engine中可以包含多个Host,每个Host定义了一个虚拟主机,它可以包含一个或者多个Web应用 : 每个Context代表了虚拟主机(Host)上的单个Web应用,一个Host可以包含多个Context
3 创建第一个JavaWeb应用
JavaWeb应用的目录结构有明确的规定
目录 | 描述 |
---|---|
/WEB-INF | 存放Web应用的配置文件web.xml的 |
/WEB-INF/classes | 存放各种.class文件,Servlet类的.class文件也才存放在此目录下 |
/WEB-INF/lib | 存放Web应用所需的jJAR包,比如jdbc的驱动JAR |
/WEB-INF/web.xml | web应用的配置文件 |
应用程序根目录 | 所有的JSP和HTML文件都放在此目录或者自定义的子目录中 |
文件结构示意图:
myapp
|—>WEB-INF
|—>classes
|—>lib
|—>web.xml
|—>html/jsp..
|—>META-INF
接下来我们创建一个JavaWeb版本的HelloWorld
在Tomcat路径的webapps文件夹下新建myapp文件夹,作为工程的总文件夹
3.1 创建Servlet类
package com.miao;
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 MessageServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String msg = request.getParameter("msg");
System.out.println(msg);
}
}
路径为 /webapps/myapp/com/miao/MessageServlet.java
使用如下命令,将MessageServlet.java进行编译并将目标文件放在WEB-INF的classes文件夹下
javac -classpath D:\developers\javadeveloper\SOFT\apache-tomcat-9.0.14\lib\servlet-api.jar -d WEB-INF\classes com\miao\MessageServlet.java
3.2 创建web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>message</servlet-name>
<servlet-class>com.miao.MessageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>message</servlet-name>
<url-pattern>/message</url-pattern>
</servlet-mapping>
</web-app>
web.xml个元素说明:
子元素 | 说明 |
---|---|
定义Servlet的名字 | |
指定Servlet的完整类名 | |
用于指定一个Servlet的URL映射,一个Servlet可以有多个servlet-mapping | |
定义Servlet的初始化参数(包括参数名和参数值),在一个 |
|
指定当Servlet容器启动Web应用时,加载各个Servlet的次序,如果这个值为正数或者零,那么Servlet容器先加载数值最小的Servlet,如果这个值为负数或者不设定,那么Servlet容器将在客户端首次访问这个Servlet时加载它(即延迟加载) | |
url映射值,可以用通配符 号,但是只能以【.后缀名】或者【/*】的格式来写 |
在web.xml中注册你的servlet,然后将web.xml放入WEB-INF目录下
启动tomcat, 在浏览器中输入http://localhost:8080/myapp/message?msg=王祖贤
可以在控制台看到如下页面
4. 发布应用
tomcat的项目管理界面
修改
在
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="root" password="root" roles="manager-gui,manager-script"/>
点击tomcat主页上的Manager App按钮, 输入上述中的username和password就可以进入项目管理界面
4.1 默认的发布方式
直接将拥有项目结构的项目文件夹放置在/webapps目录下即可,在/webapps下的所有Web应用运行在local host的虚拟机中。
4.2 自定义项目位置方式
4.2.1 方式一
新建
例如我在下图目录下新建了first_servlet.xml文件
然后在文件中添加
<Context path="/first_servlet1"
docBase="D:\developers\javadeveloper\workspace\idea\servlet_test\out\artifacts\web_war_exploded"
reloadable="true"/>
其中【docBase】属性指定了项目的外部位置,【reloadable】属性规定了是否热加载
启动tomcat,在项目管理页面可以发现已经有了刚才定义的项目
我们可以发现,项目名其实就是【first_servlet.xml】的文件名【first_servlet】,而不是我们在Context元素中的Path元素
4.2.2 方式二
直接在
<Context path="/first_servlet2"
docBase="D:\developers\javadeveloper\workspace\idea\servlet_test\out\artifacts\web_war_exploded"
reloadable="true"/>
重启tomcat可以在项目管理页面发现多了一个名为【first_servlet2】名称的项目