跳过正文
  1. 文章/
  2. Java/
  3. JavaEE/
  4. JavaWeb/

1、JavaWeb与Tomcat

·6425 字·13 分钟· loading · loading · ·
Java JavaEE JavaWeb
GradyYoung
作者
GradyYoung
JavaWeb - 点击查看当前系列文章
§ 1、JavaWeb与Tomcat 「 当前文章 」

JavaEE
#

Java EE(现在称为Jakarta EE)是Java平台的一个扩展,专注于开发和运行企业级应用程序。它提供了一组标准规范和API,用于构建可扩展、安全、可靠且高性能的分布式应用程序。Java EE涵盖了广泛的功能领域,包括Web应用程序开发、持久化、消息传递、事务管理、安全性等。

Java EE提供了一整套的规范,其中包括:

  • Servlet:用于处理Web请求和生成动态内容的Java组件。
  • JSP(JavaServer Pages):基于XML和Java的模板引擎,用于在服务器上生成动态Web页面。
  • EJB(Enterprise JavaBeans):用于开发分布式、事务性的企业级应用程序的组件模型。
  • JPA(Java Persistence API):用于对象关系映射(ORM)和持久化的API。
  • JMS(Java Message Service):用于在分布式系统中进行异步消息传递的API。
  • JTA(Java Transaction API):用于管理分布式事务的API。
  • JavaMail:用于发送和接收电子邮件的API。

JavaWeb
#

  • Java Web,是指使用Java技术开发的Web应用程序。Java Web应用程序通常基于Java EE平台,并利用Java EE提供的规范和API来构建Web功能。
  • web包括**:web服务器web客户端**两部分。
  • Java在客户端的应用有java applet不过现在使用的很少,Java在服务器端的应用非常的丰富。
  • Java的Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的流程,支持Jsp,Freemarker,Velocity等视图。

Java Web开发流程
#

  1. 确定开发环境:选择适合的Java IDE(集成开发环境),如Eclipse、NetBeans或IntelliJ IDEA。确保已安装并配置了Java EE开发环境,包括Java EE SDK和相应的应用服务器。
  2. 创建Web项目:使用IDE创建一个新的Java EE Web项目。选择合适的项目模板和配置参数,包括Web容器和部署目标。
  3. 编写Servlet和JSP代码:根据应用程序的需求,编写Servlet和JSP代码来处理Web请求、生成动态内容和与后端系统交互。可以使用Servlet API、JSP、JSTL和EL来开发功能。
  4. 配置部署描述符(web.xml):在项目的web.xml文件中配置Servlet、过滤器、监听器等组件,并定义Web应用程序的行为和特性。这包括URL映射、初始化参数、会话管理等。
  5. 构建和部署应用程序:使用构建工具(如Maven)构建Web应用程序,并将生成的WAR(Web Archive)文件部署到应用服务器中。服务器将加载并执行应用程序,使其可访问。
  6. 测试和调试:在应用服务器上运行Web应用程序,并进行测试和调试,确保其功能和性能符合预期。可以使用IDE提供的调试工具进行代码调试和错误修复。

Web项目
#

根据可请求资源的(服务器提供资源)类型的不同,分静态web项目和动态web项目

静态Web项目
#

image-20230630112833924

  • 项目里面的资源只有静态资源,例如.html.js.css.jpg

  • 在静态Web程序中,客户端使用Web浏览器经过网络连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器需要得到哪个静态资源,所有的请求交给Web服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过Web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。

  • 静态Web项目的特点

    • 静态网站是最初的建站方式,浏览者所看到的每个页面是建站者上传到服务器上的一个 html ( htm )文件,这种网站每增加、删除、修改一个页面,都必须重新对服务器的文件进行一次下载上传。网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;

    • 静态网页的内容相对稳定,因此容易被搜索引擎检索;

    • 静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;

    • 静态网页的交互性较差,在功能方面有较大的限制。如:不能实现用户注册和用户登录的功能

动态Web项目
#

image-20230630103220600

  • 项目中除了静态资源,还有例如.jsp.php.asp/.aspx
  • 动态WEB中,程序依然使用客户端和服务端,客户端依然使用浏览器通过网络连接到服务器上,使用HTTP协议发起请求(Request),现在的所有请求都先经过一个WEB Server来处理。
  • 如果客户端请求的是静态资源,则将请求直接转交给WEB服务器,之后WEB服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。
  • 如果客户端请求的是动态资源(.jsp.asp/.aspx.php),则先将请求转交给WEB Container(WEB容器),在WEB Container中连接数据库,从数据库中取出数据等一系列操作后动态拼凑页面的展示内容,拼凑页面的展示内容后,把所有的展示内容交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器进行解析执行。
  • 动态Web的特点
    • 交互性:网页会根据用户的要求和选择而动态地改变和响应,浏览器作为客户端,成为一个动态交流的桥梁,动态网页的交互性也是今后 Web 发展的潮流。
    • 自动更新:即无须手动更新 HTML 文档,便会自动生成新页面,可以大大节省工作量。
    • 因时因人而变:即当不同时间、不同用户访问同一网址时会出现不同页面。

Web服务器
#

服务器:指安装了服务器软件的计算机

服务器软件:软件,下载安装即可使用

服务器软件的作用
#

  • 可以接受用户的请求,可以对请求进行处理,然后进行响应。
  • 它可以部署web项目,可以通过浏览器访问的方式,去访问web项目中的资源

JavaWeb常用的服务器
#

  • Tomcat(Apache):是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
  • Weblogic(Oracle):用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
  • JBOSS(Redhat):是一个管理EJB的容器和服务器。但是JBoss核心服务不包含支持servlet和JSP的Web容器,但是能够很好的与Tomcat绑定使用。
  • Jetty(Webtide):Jetty是一个开源的Servlet容器,它基于Java的Web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,他的API以一组JAR包的形式发布。

Tomcat
#

官网:https://tomcat.apache.org/

目录结构
#

  • bin: 专门用来存放Tomcat服务器的可执行程序
  • conf: 专门用来存放Tomcat服务器的配置文件
  • lib: 专门用来存放Tomcat服务器的jar包
  • logs: 专门用来存放Tomcat服务器运行时输出的日志信息
  • temp: 专门用来存放Tomcat服务器运行时产生的临时数据
  • webapps: 专门用来存放部署的web工程
  • work: Tomcat工作时的目录,用来存放Tomcat运行时 jsp 翻译为 servlet 的源码,和Session钝化的目录

使用
#

前提条件
#

tomcat内置的配置文件中,需要寻找JAVA_HOME的环境变量,所以使用前必须配置JDK路径至环境变量,可执行命令查看是否配置

  • windows:echo %JAVA_HOME%
  • linux:$JAVA_HOME

启动
#

  • 方式一:进入tomcat\bin,启动startup.bat(windows)或startup.sh(linux)
  • 方式二:进入tomcat\bin,执行命令catalina run
    • 优势:可以看到启动时错误信息

关闭
#

  • tomcat/bin/shutdown.bat
  • 找到tomcat进程,杀进程

常用配置
#

修改Tomcat的端口号
#

tomcat的默认端口号是:8080

编辑tomcat/conf/server.xmlConnector节点port属性即为tomcat端口号,修改后需要重启tomcat才可生效

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

解决页面中文乱码
#

#修改tomcat/conf/server.xml中URIEncoding
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
#修改tomcat/bin/catalina.bat,在第二行添加如下
@echo off
set JAVA_OPTS=-Dfile.encoding=UTF-8

解决控制台输出乱码
#

由于tomcat默认的日志输出是UTF-8,如果在windows的dos窗口下会出现中文乱码

可以修改tomcat/conf/logging.properties中的编码格式为GBK即可

ava.util.logging.ConsoleHandler.encoding = GBK

修改webapps中项目的访问路径
#

在webapps中,每一个目录即为一个项目,项目的访问路径默认为目录名

ROOT目录的项目访问路径默认为/

可以修改tomcat/conf/server.xml文件,在节点Server/Engine/Host中添加Context指定项目的访问路径

<Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true">
    <!-- 配置webapps/myproject项目的访问路径为/ -->
    <Context path="" docBase="myproject" reloadable="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>

IDEA配置TomCat
#

IDEA/Settings/Build,Execution,Deployment/Application Servers

image-20230526095431490

IDEA创建JavaWeb项目
#

非maven项目
#

创建项目
#

点击File/New/Project,创建普通java项目

image-20230526112127819

右键项目,选择Add Framework Support,添加框架支持

image-20230526112155288

选择Java EE/Web Application

image-20230526112254300

创建后的目录结构为

image-20230526112449450

  • src:目录存放自己自己编写的java代码
  • web:目录专门用来存放web工程的资源文件,如 html、css、js等
    • WEB-INF:目录是一个受服务器保护的目录,浏览器无法直接访问到此目录的内容
    • 通常会在WEB-INF目录下创建 lib目录,用来存放第三方的jar包(IDEA中需要自己配置导入)
      • web.xml:它是整个动态web工程的配置部署描述文件,可以在这配置很多web工程的组件,比如:Servlet程序、Filter过滤器、Listener监听器、Session超时等

配置tomcat
#

点击Add Configuration,进入Run/Debug Configurations面板

点击左上角的+,选择Tomcat/local

image-20230526114142733

点击Deployment,点击Deploy at the server startup下的+,选择Artifact

image-20230526114038894

点击Apply,点击OK

添加Servlet依赖
#

进入Project Structure,如下操作

image-20230526114913720

选择Tomcat提供的Servlet依赖即可

image-20230526115008342

添加war包打包方式
#

进入Project Structure,如下操作,选择Archive

image-20230526133205780

选择Build

image-20230526133324795

选择刚才创建的Artifact即可

maven项目
#

点击File/New/Project,创建普通Java Enterprise项目

image-20230526133520745

目录结构如下

image-20230526133632027

  • java:目录存放自己自己编写的java代码
  • webapp:目录专门用来存放web工程的资源文件,如 html、css、js等
    • WEB-INF:目录是一个受服务器保护的目录,浏览器无法直接访问到此目录的内容
      • web.xml:它是整个动态web工程的配置部署描述文件,可以在这配置很多web工程的组件,比如:Servlet程序、Filter过滤器、Listener监听器、Session超时等

Web项目的部署
#

什么是部署
#

将web项目交给服务器来进行管理

war包
#

war包是 Sun 提出的一种 web 应用程序格式。它与 jar 类似,是很多文件的压缩包。war 包中的文件按照一定目录结构来组织。

一般其根目录下包含有.html.jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个 classes目录。web.xml是这个应用的配置文件,而classes目录下则包含编译好的 servlet 类和 jsp,或者 servlet 所依赖的其他类(如 JavaBean)。通常这些所依赖的类也可以打包成 jar 包放在WEB-INF下的lib目录下。

可以使用jar命令打包war包,一样的步骤,只是后缀war而已。

war包放置在tomcat的webapps目录下后,启动tomcat,tomcat会自动解压war。

部署方式
#

方式一
#

将web项目或war包,放入到tomcat\webapps文件夹中,然后开启tomcat服务器,打开浏览器,输入localhost:8080/项目名/资源名

方式二
#

在路径tomcat/conf/Catalina/localhost,在localhost中,建立配置文件:(xxx.xml),内容如下

<Context path="工程的访问路径" docBase="工程目录路径"/>

如果没有此目录,可以自行创建或者启动一次tomcat就会自动创建

此方法的工程不需要放在webapps中,可以放置在磁盘任何地方

web.xml
#

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
         id="WebApp_ID" version="3.0">
</web-app>

web.xml是Java Web项目的配置文件,一般的Web工程都会用到web.xml来配置,主要用来配置ListenerFilterServlet等。

但需要注意的是:web.xml不是必须的,一个web工程可以没有web.xml文件

web.xml文件的作用包括:

  • 配置Servlet:您可以在web.xml文件中定义和配置Servlet,包括Servlet的名称、类名、URL映射、初始化参数等。Servlet是用于处理Web请求和生成动态内容的Java类。
  • 配置过滤器(Filter):过滤器用于在请求到达Servlet之前或响应返回给客户端之前执行一些预处理或后处理操作。您可以在web.xml中配置过滤器,包括过滤器的名称、类名、URL映射、初始化参数等。
  • 配置监听器(Listener):监听器用于监听Web应用程序中发生的事件,例如Web应用程序的启动和销毁、会话的创建和销毁等。您可以在web.xml中配置监听器,包括监听器的类名和配置参数。
  • 配置错误页面:您可以在web.xml中定义错误页面,用于在发生错误时显示自定义的错误信息。可以配置不同类型的错误和对应的错误页面。
  • 配置会话管理:您可以在web.xml中配置会话管理器,以定义会话的超时时间、会话跟踪方式等。
  • 其他配置项:web.xml还可以包含其他配置项,如欢迎文件列表、MIME类型映射、安全约束等。

servlet
#

定义了一个名为HelloServlet的Servlet,并将其映射到URL模式为/hello的请求

<servlet>
  <servlet-name>HelloServlet</servlet-name>
  <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>HelloServlet</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

filter
#

定义了一个名为LoggingFilter的过滤器,并将其应用于所有请求。

<filter>
  <filter-name>LoggingFilter</filter-name>
  <filter-class>com.example.LoggingFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>LoggingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

welcome-file-list
#

指定了在访问根目录时,默认显示的文件(例如index.htmlindex.jsp)。

<welcome-file-list>
  <welcome-file>index.html</welcome-file>
  <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

error-page
#

指定了当发生404错误时,显示error404.html页面

<error-page>
  <error-code>404</error-code>
  <location>/error404.html</location>
</error-page>

display-name
#

用于指定Web应用程序的显示名称,也就是根路径

<display-name>myweb</display-name>

context-param
#

用于定义全局的上下文参数,供整个Web应用程序使用

<context-param>
  <param-name>database-url</param-name>
  <param-value>jdbc:mysql://localhost:3306/mydb</param-value>
</context-param>

mime-mapping
#

用于将文件扩展名映射到MIME类型,指示浏览器如何处理特定类型的文件

<mime-mapping>
  <extension>pdf</extension>
  <mime-type>application/pdf</mime-type>
</mime-mapping>

session-config
#

用于配置会话管理相关的参数,如会话超时时间和Cookie配置

<session-config>
  <session-timeout>30</session-timeout>
  <cookie-config>
    <name>SESSIONID</name>
    <path>/</path>
    <http-only>true</http-only>
  </cookie-config>
</session-config>

security-constraint
#

用于定义安全约束,限制对某些资源的访问。可以指定受保护的URL模式、所需的角色等

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Protected Area</web-resource-name>
    <url-pattern>/admin/*</url-pattern>
    <http-method>GET</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

login-config
#

用于配置Web应用程序的登录设置,包括登录页面和错误页面。

<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/login-error.jsp</form-error-page>
  </form-login-config>
</login-config>

jsp-config
#

用于配置JSP引擎的相关设置,如JSP编译选项、标签库等

<jsp-config>
  <taglib>
    <taglib-uri>http://example.com/mytags</taglib-uri>
    <taglib-location>/WEB-INF/mytags.tld</taglib-location>
  </taglib>
</jsp-config>
JavaWeb - 点击查看当前系列文章
§ 1、JavaWeb与Tomcat 「 当前文章 」