JavaWeb开发 Servlet技术详解(一)

简介: JavaWeb开发 Servlet技术详解

一、JavaEE简介

1.1 什么是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。

1.2 JavaEE缺点

  1. JavaEE技术使用时过于复杂了。
  2. JavaEE技术使用慢,效率过低。
  3. JavaEE技术较重,很多技术需要依赖服务器中间件。

1.3 开源框架优点

  1. 高效:开发变得简单,快速,并且有效。
  2. 成本:很多框架都是免费,并且开发人员编写代码更快,所以客户成本自然 更低。
  3. 支持:框架有文档支持,团队支持,或者大的社区支持,能迅速帮你解决问 题。

1.4 JavaEE版本

年份 版本 对JDK的支持 Servlet版本 JSP版本
1999年12月 1.2 1.1 and later 2.2 1.1
2001年9月 1.3 1.3 and later 2.3 1.2
2003年11月 1.4 1.4 and later 2.4 2.0
2006年5月 5.0 5 and later 2.5 2.1
2009年10月 6.0 6 and later 3.0 2.2
2013年6月 7.0 7 and later 3.1 2.3
2017年8月 8.0 8 and later 4.0 2.3

注意

2017 年 8 月,Java EE 已经正式更名为 Jakarta EE(雅加达)。

二、服务器

2.1 服务器简介

  1. 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。
  2. 软件服务器(英文名称Server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。

2.2 服务器分类

2.2.1 JavaEE应用服务器(JavaEE Application Server)

应用服务器是Java EE规范的具体实现, 可以执行/驱动基于JavaEE平台开发的web项目。绝大部分的应用服务器都是付费产品。

常见的应用服务:

Weblogic(BEA Oracle 收费)

Webshpere(IBM 收费)

JBoss(RedHad 收费)

Geronimo(Apache 免费)

2.2.2 Web容器(Web Server)

只实现了JavaEE平台下部分技术标准,如Servlet,Jsp,JNDI,JavaMail。Web容器是开源免费的。

Tomcat(Apache 开源免费)

Jetty(Jetty 开源免费)

三、Tomcat

3.1 Tomcat简介

Tomcat服务器是Apache的一个开源免费的Web容器。它实现了JavaEE平台下部分技术规范,属于轻量级应用服务器。

Tomcat版本 JDK版本 Servlet版本 JSP版本
10.0.X 8 and later 5.0 3.0
9.0.x 8 and later 4.0 2.3
8.0.x 7 and later 3.1 2.3
7.0.x 6 and later 3.0 2.2
6.0.x 5 and later 2.5 2.1

Tomcat作用

可以在Tomcat中运行我们所编写的Servlet、JSP。

3.2 Tomcat下载与安装

下载地址:Apache Tomcat® - Welcome!

配置环境变量

Tomcat是用Java语言开发的Web容器,所以在使用Tomcat时需要在操作系统中正确配置环境变量。

JAVA_HOME:C:\Program Files\Java\jdk1.8.0_171

PATH:%JAVA_HOME%\bin;

CLASS_PATH:%JAVA_HOME%\lib;   (这个一定要补充上,要不然会出现服务器一启动就闪退的情况)

3.3 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编译后的文件。

3.4 Tomcat的启动与关闭

Tomcat的启动与关闭需要执行bin目录中的命令脚本。

3.4.1 Tomcat启动

  • 方式一
    运行startup.bat文件。
  • 方式二
    catlina.bat start
    其中catlina.bat是命令文件,start是启动Tomcat参数。

3.4.2 Tomcat关闭

  • 方式一
    运行shutdown.bat文件。
  • 方式二
    catlina.bat stop
    其中catlina.bat是命令文件,stop是关闭Tomcat参数。
  • 方式三
    直接关闭掉控制台窗口。

3.4.3 访问Tomcat

访问Tomcat的URL格式:

http://ip:port

访问本机Tomcat的URL格式:

http://localhost:8080

3.5 Tomcat配置文件介绍

Tomcat 的配置文件由4个xml组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml。每个文件都有自己的功能与配置方法。

context.xml

context.xml 是 Tomcat 公用的环境配置。 Tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。(其他的文件只要是修改了就要重新启动tomcat)

web.xml

Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。

server.xml

是 tomcat 服务器的核心配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件,通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。

tomcat-users.xml

配置访问Tomcat的用户以及角色的配置文件。

3.6 解决控制台乱码以及修改监听端口

解决控制台乱码

控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编码,而我们中文的Windows操作系统使用的是GBK编码。由于编码格式不统一,所以出现了乱码。

解决方式:修改conf目录中的logging.properties文件重新指定的编码方式。注意ctrl+s保存。

java.util.logging.ConsoleHandler.encoding = GBK

修改Tomcat监听端口

Tomcat默认监听端口为8080。可以通过修改server.xml文件中的port来改变Tomcat的监听端口。

<Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />

3.7 配置TomcatManager

什么是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/META-INF/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>

3.8 Tomcat工作原理

Tomcat是一个能够处理请求并产生响应的应用程序。Tomcat实现了JavaEE平台下的一些技术规范(比如Servlet、JSP技术规范),所以我们可以在Tomcat中运行我们所编写的Servlet、JSP。

3.9 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>

3.9.1 Server组件

启动一个server实例(也就是启动一个tomcat ,即一个JVM进程),它监听在8005端口以接收shutdown命令。Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。

<Server port="8005" shutdown="SHUTDOWN">

port: 接收shutdown指令的端口,默认为8005;

shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;

也就是说,tomcat(或者说是server组件)一启动会监听两个端口一个是8080用于监听客户端请求,一个是8005监听SHUTDOWN命令关闭tomcat。

使用端口关闭存在远程关闭的风险,可以禁用8005端口,此时只能通过关闭敞口来关闭tomcat。当然这是运维的活!

<Server port="-1" shutdown="SHUTDOWN">

3.9.2 Service组件

Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器。

<Service name="Catalina">

name:此服务的名称,默认为Catalina;

3.9.3 Connector组件

支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理Http协议的连接器。如果需要使用其他协议,需要在Tomcat中配置该协议的连接器。

在Tomcat中连接器类型通常有4种:

  1. HTTP连接器
  2. SSL连接器(也就是https协议链接器)
  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个;

3.9.4 Engine组件

Engine是Servlet处理器的一个实例,即servlet引擎,定义在server.xml中的Service标签中。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的Host组件。(Engine就好比是汽车的发动机,Host就相当于是发动机中的刚缸体,里面存放的就是web资源)

name:Engine组件的名称;

defaultHost:Tomcat支持基于FQDN(Fully Qualified Domain Name 全限定域名)的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理(也就是当请求的域名无法找到对应的虚拟主机的话,会默认匹配域名为localhost的虚拟主机。),因此,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;

3.9.5 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;(纯Java项目可以打包为jar包,web项目可以打包为war包)

3.9.6 Context组件

Context是Host的子组件,代表指定一个Web应用,它运行在某个指定的虚拟主机(Host)上;每个Web应用都是一个WAR文件,或文件的目录。

<Context path="/test" docBase="D:\bjsxt\itbaizhan.war" />

path:context path既浏览器访问项目的访问路径。

docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;

如果将web项目部署到webapps目录下的话不需要使用context组件,但是要将项目部署到其他的地方的话,需要使用context组件告诉host组件项目的位置。

3.10 配置虚拟主机(Host)

修改server.xml添加Host配置

<!-- 默认的虚拟主机 -->
      <Host name="localhost"  appBase="webapps"
            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>
    <!-- 虚拟主机1-->
    <Host name="test1"  appBase="webapps1"
            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>
   <!-- 虚拟主机2--> 
    <Host name="test2"  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 test1
127.0.0.1 test2

3.11 配置Context

通过contex组件可以将web应用部署到其他目录中,而不是webapps下。

创建index.html页面。

将index.html资源部署到d盘的demo目录中。

通过test:8888/web/index.html访问虚拟主机,并访问index.html  (表示我要访问test虚拟主机中的web文件下的index)。

配置server.xml文件

<Host name="test"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      <Context path="/web" docBase="d:/demo"/>
    </Host>

name="test" 表示主机的名称叫test

path="/web" 表示资源的访问路径

docBase="d:/demo" 表示资源的位置

修改windows的Host文件

修改Windows系统中的Host文件做域名与IP的绑定。

Host文件位置

C:\Windows\System32\drivers\etc、

修改内容

127.0.0.1 test

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
1天前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
|
1天前
|
缓存 小程序 前端开发
Java服务器端技术探秘:Servlet与JSP的核心原理
【6月更文挑战第23天】Java Web开发中的Servlet和JSP详解:Servlet是服务器端的Java小程序,处理HTTP请求并响应。生命周期含初始化、服务和销毁。创建Servlet示例代码展示了`doGet()`方法的覆盖。JSP则侧重视图,动态HTML生成,通过JSP脚本元素、声明和表达式嵌入Java代码。Servlet常作为控制器,JSP处理视图,遵循MVC模式。优化策略涉及缓存、分页和安全措施。这些技术是Java服务器端开发的基础。
|
1天前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
【6月更文挑战第23天】Java Web开发中,Servlet和JSP是构建动态Web应用的基础。Servlet处理逻辑,JSP专注展示。示例展示了Servlet如何通过`request.setAttribute`传递数据给JSP渲染。JSP自定义标签提升页面功能,如创建`WelcomeTag`显示欢迎消息。Servlet过滤器,如`CacheControlFilter`,用于预处理数据或调整响应头。这些集成和扩展技术增强了应用效率、安全性和可维护性,是Java服务器端开发的关键。
|
1天前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
|
1天前
|
搜索推荐 Java 数据库连接
探索Java Web开发:Servlet与JSP的协同工作原理
【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
|
1天前
|
缓存 安全 小程序
从基础到进阶:掌握Java中的Servlet和JSP开发
【6月更文挑战第23天】Java Web开发中的Servlet和JSP是关键技术,用于构建动态网站。Servlet是服务器端小程序,处理HTTP请求,生命周期包括初始化、服务和销毁。基础Servlet示例展示了如何响应GET请求并返回HTML。随着复杂性增加,JSP以嵌入式Java代码简化页面创建,最佳实践提倡将业务逻辑(Servlet)与视图(JSP)分离,遵循MVC模式。安全性和性能优化,如输入验证、HTTPS、会话管理和缓存,是成功应用的关键。本文提供了一个全面的学习指南,适合各级开发者提升技能。
|
1天前
|
存储 缓存 安全
Servlet与JSP在Java服务器端开发中的实践与优化
【6月更文挑战第23天】本文探讨了Java中Servlet与JSP在在线书店系统开发中的应用,强调了它们在动态网站构建和Web效率中的作用。通过实例,展示了Servlet如何作为控制器处理用户登录,JSP则利用EL表达式呈现数据。此外,文章提及了性能优化如分页和缓存,以及安全措施如防止SQL注入和XSS攻击,强调了全面掌握和应用这些技术的重要性,以创建高效、安全的Web应用。
|
4天前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
7 0
|
4天前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
6 0
|
1月前
|
Java
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
学院管理系统【JSP+Servlet+JavaBean】(Java课设)
46 3
学院管理系统【JSP+Servlet+JavaBean】(Java课设)