1、JavaWeb与Tomcat

JavaEE

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

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

JavaWeb

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

动态Web项目

image-20230630103220600

Web服务器

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

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

服务器软件的作用

JavaWeb常用的服务器

Tomcat

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

目录结构

使用

前提条件

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

启动

关闭

常用配置

修改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

配置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

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

定义了一个名为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>