JavaEE简介
什么是JavaEE
JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业 级web开发平台,它是一组Specification。最早由Sun公司定制并发 布,后由Oracle负责维护。在JavaEE平台规范了在开发企业级web 应用中的技术标准。 在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包 含的技术点的数量会有增多)。它们分别是:JDBC、JNDI、EJB、 RMI、Servlet、JSP、XML、JMS、Java IDL、JPA、JTA、JavaMail和 JAF。
JavaEE缺点
1 JavaEE技术使用时过于复杂了。
2 JavaEE技术使用慢,效率过低。
3 JavaEE技术较重,很多技术需要依赖服务器中间件。
开源框架优点
1 高效:开发变得简单,快速,并且有效。
2 成本:很多框架都是免费,并且开发人员编写代码更快,所以客户成本自然 更低。
3 支持:框架有文档支持,团队支持,或者大的社区支持,能迅速帮你解决问 题。
JavaEE版本
注意 2017 年 8 月,Java EE 已经正式更名为 Jakarta EE(雅加 达)。
服务器
服务器简介
1、硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高, 因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。
2、软件服务器(英文名称Server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件, 通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被 称为服务器。
服务器分类
JavaEE应用服务器(JavaEE Application Server)
应用服务器是Java EE规范的具体实现, 可以执行/驱动基于JavaEE平 台开发的web项目。绝大部分的应用服务器都是付费产品。
常见的应用服务:
Weblogic(BEA Oracle 收费)
Webshpere(IBM 收费)
JBoss(RedHad 收费)
Geronimo(Apache 免费)
Web容器(Web Server)
只实现了JavaEE平台下部分技术标准,如Servlet,Jsp,JNDI, JavaMail。Web容器是开源免费的。
Tomcat(Apache 开源免费)
Jetty(Jetty 开源免费)
Tomcat的使用
Tomcat简介
Tomcat服务器是Apache的一个开源免费的Web容器。它实现了 JavaEE平台下部分技术规范,属于轻量级应用服务器。
Tomcat版本说明
Tomcat作用
可以在Tomcat中运行我们所编写的Servlet、JSP。
Tomcat下载与安装
下载
下载地址:http://tomcat.apache.org/
安装
配置环境变量
Tomcat是用Java语言开发的Web容器,所以在使用Tomcat时需要 在操作系统中正确配置环境变量。
JAVA_HOME:C:\Program Files\Java\jdk1.8.0_171
PATH:%JAVA_HOME%\bin;
CLASS_PATH:%JAVA_HOME%\lib;
Tomcat目录结构与介绍
bin
bin目录主要是用来存放tomcat的命令文件,主要有两大类,一类 是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命 令)。
conf
conf目录主要是用来存放tomcat的一些配置文件。
lib
lib目录主要用来存放tomcat运行需要加载的jar包。
logs
logs目录用来存放tomcat在运行过程中产生的日志文件。
temp
temp目录用户存放tomcat在运行过程中产生的临时文件。(清空 不会对tomcat运行带来影响)
webapps
webapps目录用来存放应用程序,当tomcat启动时会去加载 webapps目录下的应用程序。可以以文件夹、war包的形式发布应 用。
work
work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后 的文件。
Tomcat启动与关闭
Tomcat的启动与关闭需要执行bin目录中的命令脚本。
Tomcat启动
方式一
运行startup.bat文件。
方式二
catlina.bat start 其中catlina.bat是命令文件,start是启动Tomcat参数。
Tomcat关闭
方式一
运行shutdown.bat文件。
方式二
catlina.bat stop 其中catlina.bat是命令文件,stop是关闭Tomcat参数。
方式三
直接关闭掉控制台窗口。
访问Tomcat
访问Tomcat的URL格式:
http://ip:port
访问本机Tomcat的URL格式:
http://localhost:8080
Tomcat配置文件介绍
Tomcat 的配置文件由4个xml组成,分别是 context.xml、 web.xml、server.xml、tomcat-users.xml。每个文件都有自己的 功能与配置方法。
context.xml
context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时 去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自 动重新加载这个文件,而不需要重启服务器 。
web.xml
Web应用程序描述文件,都是关于是Web应用程序的配置文件。所 有Web应用的 web.xml 文件的父文件。
server.xml
是 tomcat 服务器的核心配置文件,server.xml的每一个元素都对 应了 tomcat中的一个组件,通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。
tomcat-users.xml
配置访问Tomcat的用户以及角色的配置文件。
解决控制台乱码
控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编 码,而我们中文的Windows操作系统使用的是GBK编码。由于编码 格式不统一,所以出现了乱码。
解决方式:
修改conf目录中的logging.properties文件重新指定的编码方式。
java.util.logging.ConsoleHandler.encoding = GBK
修改Tomcat监听端口
控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编 码,而我们中文的Windows操作系统使用的是GBK编码。由于编码 格式不统一,所以出现了乱码。
解决方式:
修改conf目录中的logging.properties文件重新指定的编码方式。
java.util.logging.ConsoleHandler.encoding = GBK
修改Tomcat监听端口
Tomcat默认监听端口为8080。可以通过修改server.xml文件来改变 Tomcat的监听端口。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
配置Tomcat Manager
什么是Tomcat Manager
Tomcat Manager是Tomcat自带的、用于对Tomcat自身以及部署 在Tomcat上的应用进行管理的web应用。默认情况下,Tomcat Manager是处于禁用状态的。准确的说,Tomcat Manager需要以 用户角色进行登录并授权才能使用相应的功能,不过Tomcat并没有 配置任何默认的用户,因此我们需要先进行用户配置后才能使用 Tomcat Manager。
配置Tomcat Manager的访问用户
Tomcat Manager中没有默认用户,我们需要在tomcat-users.xml 文件配置。Tomcat Manager的用户配置需要配置两个部分:角色 配置、用户名及密码配置。
Tomcat Manager中的角色分类
manager-gui角色: 允许访问HTML GUI和状态页面(即URL路径为/manager/html/*) manager-script角色: 允许访问文本界面和状态页面(即URL路径为/manager/text/*) manager-jmx角色: 允许访问JMX代理和状态页面(即URL路径 为/manager/jmxproxy/*) manager- status角色: 仅允许访问状态页面(即URL路径为/manager/status/*)
配置用户及角色
修改tomcat-users.xml
// <role rolename ="manager-gui"/>
// <user username ="tomcat" password ="tomcat"
// roles="manager-gui" />
解除访问限制
进入Tomcat的webapps目录下,打开webapps/manager/METAINF/context.xml文件,修改下面这段配置
<context antiresourcelocking="false" privileged="true">
<!-- 把下面这段注释掉 -->
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1 " /> -->
</context>
Tomcat架构讲解
Tomcat工作原理
Tomcat是一个能够处理请求并产生响应的应用程序。Tomcat实现 了JavaEE平台下的一些技术规范,所以我们可以在Tomcat中运行我 们所编写的Servlet、JSP。
Tomcat架构图
conf/server.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- 连接器监听端口是 8080,默认通讯协议是 HTTP/1.1 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- 名字为 Catalina 的引擎,其默认的虚拟主机是 localhost -->
<Engine name="Catalina" defaultHost="localhost">
<!-- 名字为 localhost 的虚拟主机,其目录是 webapps-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
Tomcat组件
Server组件
启动一个server实例(即一个JVM进程),它监听在8005端口以接 收shutdown命令。Server的定义不能使用同一个端口,这意味着 如果在同一个物理机上启动了多个Server实例,必须配置它们使用 不同的端口。
<Server port="8005" shutdown="SHUTDOWN">
port: 接收shutdown指令的端口,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符 串,默认为SHUTDOWN;
Service组件
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接 器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进 行处理。困此,Service要包含一个引擎、一个或多个连接器。
<Service name="Catalina">
name:此服务的名称,默认为Catalina;
Connector组件
支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以 适应多种请求方式。默认只开启了处理Http协议的连接器。如果需 要使用其他协议,需要在Tomcat中配置该协议的连接器。
在Tomcat中连接器类型通常有4种:
1 HTTP连接器
2 SSL连接器
3 AJP 1.3连接器
4 proxy连接器
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
port:监听的端口
protocol:连接器使用的协议,默认为HTTP/1.1; connectionTimeout:等待客户端发送请求的超时时间,单位为毫 秒;
redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发 来的HTTPS请求时,则转发至此属性定义的端口;
maxThreads:支持的最大并发连接数,默认为200个;
Engine组件
Engine是Servlet处理器的一个实例,即servlet引擎,定义在 server.xml中的Service标签中。Engine需要defaultHost属性来为 其定义一个接收所有发往非明确定义虚拟主机的请求的Host组件。
<Engine name="Catalina"
defaultHost="localhost">
name:Engine组件的名称;
defaultHost:Tomcat支持基于FQDN(Fully Qualified Domain Name 全限定域名)的虚拟主机,这些虚拟主机可以通过在Engine容 器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到 一个发往非明确定义虚拟主机的请求时则需要将此请求发往一个默 认的虚拟主机进行处理,因此,在Engine中定义的多个虚拟主机的 主机名称中至少要有一个跟defaultHost定义的主机名称同名;
Host组件
虚拟主机
虚拟主机(英语:virtual hosting)或称共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现 多网域服务的方法,可以运行多个网站或服务的技术。 Host组件位于Engine容器中用于接收请求并进行相应处理的虚拟主 机。通过该容器可以运行Servlet或者JSP来处理请求。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
name:虚拟主机的名称,Tomcat通过在请求URL中的域名与 name中的值匹配,用于查找能够处理该请求的虚拟主机。如果未 找到则交给在Engine中defaultHost指定的主机处理; appBase:此Host的webapps目录,即指定存放web应用程序的目 录的路径;
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的 应用程序文件是否自动进行deploy;默认为true;
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先 进行展开;默认为true;
Context组件
Context是Host的子组件,代表指定一个Web应用,它运行在某个 指定的虚拟主机(Host)上;每个Web应用都是一个WAR文件,或 文件的目录。
<Context path="/test"
docBase="D:\bjsxt\itbaizhan.war" />
path:context path既浏览器访问项目的访问路径。
docBase:相应的Web应用程序的存放位置;也可以使用相对路 径,起始路径为此Context所属Host中appBase定义的路径;
配置虚拟主机(Host)
创建页面
webapps1/a/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> BJSXT </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
Welcome to BJSXT
</BODY>
</HTML>
webapps2/a/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ITBZ </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
Welcome to ITBZ
</BODY>
</HTML>
修改server.xml添加Host配置
<Host name="bjsxt.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.Access LogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="itbz.com" appBase="webapps2"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
修改windows的Host文件
修改Windows系统中的Host文件做域名与IP的绑定。
Host文件位置
C:\Windows\System32\drivers\etc
修改内容
127.0.0.1 itbz.com
127.0.0.1 bjsxt.com
配置Context
创建index.html页面。 将index.html资源部署到d盘的demo目录中。
通过itbz.com:8888/itbz/index.html访问虚拟主机,并访问 index.html。
创建页面
创建index.html页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ITBZ </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
Welcome to ITBZ
</BODY>
</HTML>
修改server.xml添加Host配置
<Host name="itbz.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
添加Context配置
<Context path="/itbz" docBase="d:/demo"/>
修改windows的Host文件
修改Windows系统中的Host文件做域名与IP的绑定。
Host文件位置
C:\Windows\System32\drivers\etc
修改内容
127.0.0.1 www.itbz.com
Servlet技术详解
Web开发历史回顾
CGI
公共网关接口(Common Gateway Interface,CGI)是Web 服务 器运行时外部程序的规范。
CGI缺点
1、以进程方式运行,对每一个客户端的请求都要启动一个进程来运行程序,导致用户数目增加时,服 务器端资源被大量占用。
2、由于对操作系统和进程的不深刻理解,使得开发人员开发的CGI程序经常遇到莫名其妙的错误。
3、不同的CGI之间不能共享资源
FastCGI
FastCGI是对CGI模式的一个改进,采用了Pooling技术,一定程度 上改善了性能,但是由于仍然是基于进程运行的所以并没有从根本 上解决问题。
Servlet简介
Servlet是Server Applet的简称,称为服务端小程序,是JavaEE平台 下的技术标准,基于Java语言编写的服务端程序。 Web 容器或应用 服务器实现了Servlet标准所以Servlet需要运行在Web容器或应用服 务器中。Servlet主要功能在于能够在服务器中执行并生成数据。
Servlet技术特点
Servlet在应用程序中的位置
创建第一个Servlet案例
Servlet版本:Servlet4.0
创建Servlet
package com.itbaizhan.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
PrintWriter pw = response.getWriter();
pw.println("<!DOCTYPE html>");
pw.println("<html lang=en>");
pw.println("<head>");
pw.println("<meta charset=UTF-8>");
pw.println("
<title>Document</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<font color=blue>HelloWorld</font>");
pw.println("</body>");
pw.println("</html>");
pw.flush();
pw.close();
}
}
编译Servlet
D:\>javac -classpath "D:\apache-tomcat-9.0.55\lib\servlet-api.jar" HelloWorld.java
创建web.xml
什么是web.xml
Web项目的部署描述文件,是JavaWeb工程的配置文件,通过 web.xml文件可以配置servlet、filter等技术。Tomcat启动时会先 解析该配置文件获取项目的配置信息。
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/XMLSchemainstance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
在web.xml文件中配置Servlet
<?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/webapp_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.itbaizhan.servlet.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/helloworld.do</url-pattern>
</servlet-mapping>
</web-app>
部署Servlet
Web工程目录结构
访问Servlet
http://localhost:8888/servletdemo/helloworld. do 1
Tomcat运行过程
1、用户访问localhost:8888/test/helloword.do,请求被发送到Tomcat,被监听8888端口并处理 HTTP/1.1 协议的Connector获得。
2 Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
3 Engine获得请求localhost/test/helloword.do,匹配所有的虚拟主机Host。
4 Engine匹配到名为localhost的Host虚拟主机来处理/test/helloword.do请求(即使匹配不到会请求交给默认Host处理)。
5 匹配到的Context获得请求/helloword.do。
6 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用HelloWorld的doGet()或doPost().执行业务逻辑、数据存储等程序。
7 Context把执行完之后的结果通过HttpServletResponse对象返回给Host。
8 Host把HttpServletResponse返回给Engine。
9 Engine把HttpServletResponse对象返回Connector。
10 Connector把HttpServletResponse对象返回给客户Browser。
Servlet继承结构
Servlet接口
1 init(),创建Servlet对象后立即调用该方法完成一些初始化工作。
2 service(),处理客户端请求,执行业务操作,利用响应对象响应客户端请求。
3 destroy(),在销毁Servlet对象之前调用该方法,释放资源。
4 getServletConfig(),ServletConfig是容器向servlet传递参数的载体。
5 getServletInfo(),获取servlet相关信息。
ServletConfig接口
1 String getServletName(),返回 Servlet 的名字,即 web.xml 中 元素的值。
2 ServletContext getServletContext(),返回一个代表当前 Web 应用的 ServletContext 对象。
3 String getInitParameter(String name),根据初始化参数名返回对应的初始化参数值。
4 Enumeration getInitParameterNames(),返回一个 Enumeration 对象,其中包含了所有的初始 化参数名。
GenericServle抽象类
GenericServlet是实现了Servlet接口的抽象类。在GenericServlet 中进一步的定义了Servlet接口的具体实现,其设计的目的是为了和 应用层协议解耦,在GenericServlet中包含一个Service抽象方法。
HttpServlet类
继承自 GenericServlet,针对于处理 HTTP 协议的请求所定制。在 HttpServlet的service() 方法中已经把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse。 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转。实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可。
Servlet的生命周期
Servlet的生命周期是由容器管理的,分别经历三各阶段:
init():初始化
service():服务
destroy():销毁
当客户端浏览器第一次请求Servlet时,容器会实例化这个Servlet, 然后调用一次init方法,并在新的线程中执行service方法处理请 求。service方法执行完毕后容器不会销毁这个Servlet而是做缓存处 理,当客户端浏览器再次请求这个Servlet时,容器会从缓存中直接 找到这个Servlet对象,并再一次在新的线程中执行Service方法。当 容器在销毁Servlet之前对调用一次destroy方法。
Servlet处理请求的原理
当浏览器基于get方式请求我们创建Servlet时,我们自定义的 Servlet中的doGet方法会被执行。doGet方法能够被执行并处理get 请求的原因是,容器在启动时会解析web工程中WEB-INF目录中的 web.xml文件,在该文件中我们配置了Servlet与URI的绑定,容器 通过对请求的解析可以获取请求资源的URI,然后找到与该URI绑定 的Servlet并做实例化处理(注意:只实例化一次,如果在缓存中能够 找到这个Servlet就不会再做次实例化处理)。在实例化时会使用 Servlet接口类型作为引用类型的定义,并调用一次init方法,由于 GenericServlet中重写了该方法所以最终执行的是GenericServlet中 init方法(GenericServlet中的Init方法是一个空的方法体),然后在新 的线程中调用service方法。由于在HttpServlet中重写了Service方 法所以最终执行的是HttpServlet中的service方法。在service方法 中通过request.getMethod()获取到请求方式进行判断如果是Get方 式请求就执行doGet方法,如果是POST请求就执行doPost方法。如 果是基于GET方式提交的,并且在我们的Servlet中又重写了 HttpServlet中的doGet方法,那么最终会根据Java的多态特性转而 执行我们自定义的Servlet中的doGet方法。
Servlet的作用
1、获取用户提交的数据
2、获取浏览器附加的信息
3、处理数据(访问数据库或调用接口)
4、给浏览器产生一个响应
5、在响应中添加附加信息
在Idea中创建Web工程
三个步骤:
1 创建Web工程
2 添加servlet-api.jar
3 配置Tomcat
在Idea创建Web工程
添加servlet-api.jar
在Idea中配置Tomcat
修改项目的访问路径(Context Path)
在Web工程中编写Servlet
Idea中的web项目部署详解
在Idea中默认的并不会把web项目真正的部署到Tomcat的webapps 目录中,而是通过为每个web项目创建一个独立的Tomcat副本并在 Tomcat副本中通过的Tomcat的Context组件完成项目的目录指定, 在Context组件的docBase属性中会指定Idea对web项目编译后的目 录out/artifacts/.....。
默认部署方式
Idea会在 C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea202 0.2\tomcat中为每个Web项目创建一个独立的Tomcat副本。
C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea202 0.2\tomcat\Unnamed_servletdemo_2\conf\Catalina\localhost目 录中生成一个该项目的xml文件名称为:”项目名.xml”。
在xml文件中指定web项目编译完后的artifacts目录的位置。
<Context path="/servletdemo"
docBase="D:\webproject\servletdemo\out\artifa
cts\servletdemo_war_exploded" />
Idea通过执行Tomcat的catalina.bat启动脚本启动Tomcat,通过启 动参数来指定启动Tomcat副本运行指定目录中的web项目。
Idaa在启动Tomcat之前会先在操作系统中设置一些临时环境变量, 这些变量会被Tomcat的启动脚本所读取。
CATALINA_BASE:是Tomcat副本的工作目录
CATALINA_HOME:是Tomcat的安装目录
在Catalina.bat启动脚本运行时,会先去判断脚本中的 CATALINA_HOME以及CATALINA_BASE是否为空,如果为空则使用 Tomcat路径作为默认值。由于Idea在启动Tomcat之前已经设置了 临时环境变量,所以tomcat在启动后就会运行部署在Tomcat副本 中的web项目。
将web项目部署到Tomcat的webapps中
点击项目结构选项
指定输出artifacts的目录为Tomcat的webapps中的demo目录。
启动Tomcat,查看demo目录中的内容。
HttpServletRequest对象
HttpServletRequest对象代表客户端浏览器的请求,当客户端浏览 器通过HTTP协议访问服务器时,HTTP请求中的所有信息都会被 Tomcat所解析并封装在这个对象中,通过这个对象提供的方法,可 以获得客户端请求的所有信息。
获取请求信息
req.getRequestURL()
返回客户端浏览器发出请求时的完整URL。
req.getRequestURI()
返回请求行中指定资源部分。
req.getRemoteAddr()
返回发出请求的客户机的IP地址。
req.getLocalAddr()
返回WEB服务器的IP地址。
req.getLocalPort()
返回WEB服务器处理Http协议的连接器所监听的端口。
获取请求数据
根据key获取指定value
req.getParameter("key");
根据key获取对应的value,返回一个字符串。
String str = req.getParameter("key");
获取复选框(checkbox组件)中的值
req.getParameterValues("checkboxkey");
获取复选框(checkbox组件)中的值,返回一个字符串数组。
String[] userlikes = req.getParameterValues("checkboxkey");
获取所有提交数据的key
req.getParameterNames()
获取请求中所有数据的key,该方法返回一个枚举类型。
Enumeration<String> parameterNames = req.getParameterNames();
使用Map结构获取提交数据
req.getParameterMap()
获取请求中所有的数据并存放到一个Map结构中,该方法返回一个 Map,其中key为String类型value为String[]类型。
Map<String, String[]> parameterMap = req.getParameterMap()
设置请求编码
req.setCharacterEncoding("utf-8")
请求的数据包基于字节在网络上传输,Tomcat接收到请求的数据包 后会将数据包中的字节转换为字符。在Tomcat中使用的是ISO8859-1的单字节编码完成字节与字符的转换,所以数据中含有中文 就会出现乱码,可以通过req.setCharacterEncoding("utf-8")方法 来对提交的数据根据指定的编码方式重新做编码处理。
资源访问路径
绝对路径
绝对路径访问资源表示直接以”/”作为项目的Context Path。该方式 适用于以”/”作为项目的Context Path。
<form action="/getInfo.do" method="post">
相对路径
相对路径访问资源表示会相对于项目的Context Path作为相对路 径。该方式适用于为项目指定的具体的Context Path。
<form action="getInfo.do" method="post">
获取请求头信息
req.getHeader("headerKey")
根据请求头中的key获取对应的value。
String headerValue = req.getHeader("headerKey");
req.getHeaderNames()
获取请求头中所有的key,该方法返回枚举类型。
Enumeration<String> headerNames = req.getHeaderNames();
获取请求头案例
需求:编写一个Servlet,如果浏览器的语言是zh-CN,显示“你好, 聪明的中国人!”,如果浏览器的语言设置为en-US,那么则显示 “Hello,American”。
HttpServletRequest对象的生命周期
当有请求到达Tomcat时,Tomcat会创建HttpServletRequest对 象,并将该对象通过参数的方式传递到我们Servlet的方法中,当处 理请求处理完毕并产生响应后该对象生命周期结束。