一、本教程使用的Web容器——Tomcat
Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能根据实时需要,产生动态网页内容。而对于Web服务器来说, Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力;Tomcat则既能为动态网页服务,同时也能为静态网页提供支持。尽管它没有通常的Web服务器快、功能也不如Web服务器丰富,但是Tomcat逐渐为支持静态内容不断扩充。大多数的Web服务器都是用底层语言编写如C,利用了相应平台的特征,因此用纯Java编写的Tomcat执行速度不可能与它们相提并论。一般来说,大的站点都是将Tomcat与Apache的结合,Apache负责接受所有来自客户端的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完成处理后,将响应传回给Apache,最后Apache将响应返回给客户端。
1.1 Tomcat访问静态资源
tomcat访问所有的资源,都是用Servlet来实现的。
在Tomcat看来,资源分3种:
- 静态资源,如css,html,js,jpg,png等
- Servlet
- JSP
运行应用程序的Web容器将会有一个或多个内建的Servlet,这些Servlet用于处理JavaServer Pages、显示目录列表(如果启用了该功能的话)和访问静态资源,例如HTML页面和图片。
JspServlet用于处理JSP页面,DefaultServlet是处理静态资源的Servlet,在tomcat的conf目录下web.xml:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <!-- The mapping for the default servlet --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- The mappings for the JSP servlet --> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
1.2 安装tomcat
配置jdk环境变量
下载,解压,目录结构如下:
bin目录 可执行文件,如启动tomcat
conf目录 配置文件
lib目录 第三方依赖的jar包
logs目录 日志
temp目录 临时文件
webapps目录 部属的web应用
work目录 jsp翻译成servlet再翻译成class的文件
双击bin中的startup.bat可以启动tomcat
若已经启动一个tomcat应用,再启动同一个tomcat应用,会抛出端口占用异常
用bin中的shutdown.bat可以关闭tomcat
修改端口号
server.xml
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
1.3 Tomcat中JavaWeb目录结构
1.3.1 目录结构
创建的Web项目,必须有一个根目录,根目录下:
- *.html、*.jsp等外部可以公开访问的文件,看成公开目录
- WEB-INF/web.xml,必须要有, 部属描述符
- WEB-INF/classes,编译后的Java类文件,可选
- WEB-INF/lib,Java类库文件
WEB-INF/目录中的文件是受到保护的,不能通过URL访问。
1.3.2 手工创建一个web项目
用eclipse创建一个普通java工程
创建com.aidata包,并创建Person类
package com.aidata; public class Person { public String getPersonInfo() { return "person info..."; } }
下面手工创建tomcat项目目录
创建WebContent根目录
创建WEB-INF目录
创建目录WEB-INF/classes,创建com文件夹,com下创建aidata文件夹,将eclipse的bin目录下生成的Person.class拷贝过来
创建目录WEB-INF/lib
从tomcat拷贝一个web.xml到WEB-INF目录下
在根目录下创建一个jsp页面
<%@page import="com.aidata.Person"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% Person person = new Person(); System.out.println(person.getPersonInfo()); %> </body> </html>
将根目录拷贝到tomcat的webapps目录下
启动tomcat
浏览器输入http://localhost:8080/WebContent/hello.jsp,命令行窗口会打印
二、Servlet
Java Web项目的构成:
- 需要自己的代码和它依赖的第三方库
- 部属描述符,其中包含了部属和启动应用程序的指令
- 可以添加ClassLoader用于将自己的应用程序与同一台服务器上的其他Web应用程序隔离
- 通过某种方式将应用程序打包,生成WAR和EAR文件
Servlet
Servlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能,统一接口。由其他内部厂商如tomcat,jetty内部实现web的功能。Servlet就是一群人来制定java应用中使用web时的各种规范,统一接口,其他内部实现由厂商自己实现,tomcat jetty jboss等等应运而生。面向接口编程。
我们只需要创建servlet,实现servlet接口的方法就可以了,其他的都交给servlet容器就好了。