JavaWeb----Servlet技术

news2025/7/15 21:02:03

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 &quot;%r&quot; %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 &quot;%r&quot; %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的方法中,当处 理请求处理完毕并产生响应后该对象生命周期结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统】死锁(详细)

文章目录一、死锁的概念二、死锁的产生因素三、死锁的必要条件1、互斥条件2、占有和等待条件&#xff08;部分分配条件&#xff09;3、不剥夺条件4、循环等待条件&#xff08;环路条件&#xff09;四、死锁防止1、破坏互斥条件2、破坏占有和等待条件3、破坏不剥夺条件4、破坏循…

Ceph文件系统

目录 一、环境准备 二、什么是文件系统 三、ceph块存储与文件系统区别 四、创建ceph文件系统 1、启动MDS服务 2、创建存储池 3、创建Ceph文件系统 4、客户端挂载 一、环境准备 Ceph集群搭建参照&#xff1a;Ceph集群部署_桂安俊kylinOS的博客-CSDN博客 以下Ceph存储实…

springcloud22:sentinal的使用

sentinal对比&#xff08;分布式系统的流量防卫&#xff09; 监控保护微服务 Hystrix 需要自己去手工搭建监控平台&#xff0c;没有一套web界面可以进行细粒度化的配置&#xff0c;流控&#xff0c;速率控制&#xff0c;服务熔断&#xff0c;服务降级… 整合机制&#xff1a;se…

外卖项目08---Linux

目录 一、 Linux简介 119 二、Linux安装 120 三、常用命令 122 3.1Linux命令初体验 3.1.1 command [-options] [parameter] 3.2Linux常用命令---文件目录操作命令-ls&-cd&-cat 124 3.2.1list 3.2.2 cd 3.2.3 cat 3.3 Linux常用命令---文件目录操作命令…

9.前端笔记-CSS-CSS三大特性

三大特性&#xff1a;层叠性、继承性、优先级 1、层叠性&#xff08;覆盖性&#xff09; 给相同的选择器设置相同的样式&#xff0c;此时一个样式会覆盖&#xff08;层叠&#xff09;其他冲突的样式。 层叠性原则&#xff1a; 同一选择器&#xff0c;样式冲突&#xff0c;遵…

OpenMV输出PWM,实现对舵机控制

OpenMV的定时器官方函数介绍&#xff1a;Timer类 – 控制内部定时器 目录 OpenMV的PWM资源介绍 为什么要用OpenMV输出PWM OpenMV的PWM资源分配 资源 注意 建议 PWM输出代码 代码讲解 Timer Timer.channel tim.channel与Timer.channel区别 Timer.channel解析 OpenM…

Iframe通信

跨域的种类 一般有两种形式的跨域问题&#xff1a; ①使用XmlHttpRequest(XHR)或者使用AJAX发送的POST或者GET请求。这种形式的跨域是&#xff1a;前端页面与后端进行的跨域请求。 ②父子页面之间进行的DOM操作&#xff08;父子窗口之间的document操作&#xff09;。这种形式…

使用XShell、XFTP 连接 win7 虚拟机(windows、Linux无法远程登录问题)

文章目录前言出错原因&#xff08;题外话&#xff09;那么我们为什么要使用 SSH 连接开始操作&#xff08;Windows7&#xff09;首先进行 SSH 测试获取所需的openSSH文件安装openSSH添加环境变量ssh测试发布ssh服务开始操作&#xff08;Linux&#xff0c;以Ubuntu为例&#xff…

Linux启动流程分析

一、Linux启动流程图 二、硬件启动流程 2.1、POST Linux开机加电后&#xff0c;系统开始开机自检&#xff0c;该过程主要对计算机各种硬件设备进行检测&#xff0c;如CPU、内存、主板、硬盘、CMOS芯片等。主要完成检测硬件能否满足运行的基本条件&#xff0c;叫做“硬件自检(P…

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

onnx-modifier使用

文章目录**0、作用和功能****1、准备****2、界面介绍****3、注意tips**onnx-modifier基于流行的模型可视化工具 Netron 和轻量级Web应用框架 flask 开发。希望它能给社区带来一些贡献0、作用和功能 经常作为不同框架模型转化的中间文件&#xff0c;拿到ONNX文件&#xff0c;想…

KMP算法【一句话概括什么是KMP】【手写 求next数组】【手写匹配过程】

这里写自定义目录标题1. 什么是KMP算法2. next数组的表示含义怎么算3. 匹配过程例题——KMP字符串1. 什么是KMP算法 KMP算法&#xff1a;给定abcabm字符串和abcabcabm字符串&#xff0c;求前面字符串在后面字符串出现的位置&#xff0c;我们从头开始依次遍历&#xff0c;当遍历…

Supervisor - 用户进程监控利器

Supervisor Supervisor 是一个客户端/服务器系统&#xff0c;允许用户在UNIX操作系统上监视、控制用户进程。从定义里面分析包含两层意思。 监控进程 - 监控进程状态 确定当前进程是否发生异常控制进程 - 针对进程异常情况 控制进程的行为 如重启当前进程 Supervisor 通过 F…

神经网络和深度学习-logistic回归

logistic回归 logistic回归常用于分类问题 &#xff0c;根据输入的x来估计属于不同类的概率为多少&#xff0c;满足分布&#xff0c;即所有类的概率总和为1 在torchvison包中提供了一些常用的数据集&#xff0c;供我们使用&#xff0c;例如&#xff1a;Mnist数据集 Cifar-10数…

力扣算法入门刷题2

12、删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2[ //链表结构 public class ListNode {* int val;* List…

【情感识别】BP神经网络语音情感识别【含Matlab源码 349期】

⛄一、BP神经网络语音情感识别简介 0 引言 随着科技的迅速发展, 人机交互显得尤为重要。语音是语言的载体, 是人与人之间交流的重要媒介。相较于其它交流方式而言, 语音交流更加直接、便捷。近年来, 随着人机交互研究的不断深入, 语音情感识别更成为了学术界研究的热点, 其涉及…

3年测试经验,投了300多份简历,没公司要我...

前言 软件测试行业3年多经验&#xff0c;学历大专自考本科&#xff0c;主要测试方向web&#xff0c;PC端&#xff0c;wap站&#xff0c;小程序公众号都测试过&#xff0c;app也测过一些&#xff0c;C端B端都有&#xff0c;除功能外&#xff0c;接口性能也有涉猎&#xff0c;但…

一条命令能实现前端本地代码和打包仓库的自动化提交?

背景&#xff1a; 先介绍我们原本的代码上线流程&#xff1a;首先发布仓和代码仓&#xff08;dev和master分支对应测试和生产环境&#xff09;独立&#xff0c;每次修复或新增功能&#xff0c;首先需要提交改动到代码仓&#xff08;fork&#xff09;&#xff0c;然后打包代码&…

TI Sitara系列 AM64x开发板——FreeRTOS、Baremetal案例开发案例

前 言 3 1 开发环境搭建 2 CCS工程编译与加载 3 FreeRTOS与Baremetal案例 评估板简介 创龙科技TL62x-EVM是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F异构多核处理器设计的高性能低功耗工业评估板,由核心板和评估底板组成。处理器ARM Cor…

SpringCloud之微服务实用篇2

在之前我们学习微服务中的两个组件&#xff0c;一个是注册中心&#xff0c;一个负载均衡器。今天&#xff0c;我们主要学习三个内容&#xff0c;分别是&#xff1a;Nacos配置管理、Feign远程调用、Gateway服务网关。 目录 一、Nacos配置管理 1.1、Nacos实现配置管理 1.2、微…