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开发流程 #
- 确定开发环境:选择适合的Java IDE(集成开发环境),如Eclipse、NetBeans或IntelliJ IDEA。确保已安装并配置了Java EE开发环境,包括Java EE SDK和相应的应用服务器。
- 创建Web项目:使用IDE创建一个新的Java EE Web项目。选择合适的项目模板和配置参数,包括Web容器和部署目标。
- 编写Servlet和JSP代码:根据应用程序的需求,编写Servlet和JSP代码来处理Web请求、生成动态内容和与后端系统交互。可以使用Servlet API、JSP、JSTL和EL来开发功能。
- 配置部署描述符(web.xml):在项目的web.xml文件中配置Servlet、过滤器、监听器等组件,并定义Web应用程序的行为和特性。这包括URL映射、初始化参数、会话管理等。
- 构建和部署应用程序:使用构建工具(如Maven)构建Web应用程序,并将生成的WAR(Web Archive)文件部署到应用服务器中。服务器将加载并执行应用程序,使其可访问。
- 测试和调试:在应用服务器上运行Web应用程序,并进行测试和调试,确保其功能和性能符合预期。可以使用IDE提供的调试工具进行代码调试和错误修复。
Web项目 #
根据可请求资源的(服务器提供资源)类型的不同,分静态web项目和动态web项目
静态Web项目 #
-
项目里面的资源只有静态资源,例如
.html、.js、.css、.jpg等 -
在静态Web程序中,客户端使用Web浏览器经过网络连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器需要得到哪个静态资源,所有的请求交给Web服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过Web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。
-
静态Web项目的特点
-
静态网站是最初的建站方式,浏览者所看到的每个页面是建站者上传到服务器上的一个 html ( htm )文件,这种网站每增加、删除、修改一个页面,都必须重新对服务器的文件进行一次下载上传。网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;
-
静态网页的内容相对稳定,因此容易被搜索引擎检索;
-
静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难;
-
静态网页的交互性较差,在功能方面有较大的限制。如:不能实现用户注册和用户登录的功能
-
动态Web项目 #
- 项目中除了静态资源,还有例如
.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.xml,Connector节点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 "%r" %s %b" />
</Host>
IDEA配置TomCat #
IDEA/Settings/Build,Execution,Deployment/Application Servers
IDEA创建JavaWeb项目 #
非maven项目 #
创建项目 #
点击File/New/Project,创建普通java项目
右键项目,选择Add Framework Support,添加框架支持
选择Java EE/Web Application
创建后的目录结构为
- 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
点击Deployment,点击Deploy at the server startup下的+,选择Artifact
点击Apply,点击OK
添加Servlet依赖 #
进入Project Structure,如下操作
选择Tomcat提供的Servlet依赖即可
添加war包打包方式 #
进入Project Structure,如下操作,选择Archive
选择Build
选择刚才创建的Artifact即可
maven项目 #
点击File/New/Project,创建普通Java Enterprise项目
目录结构如下
- java:目录存放自己自己编写的java代码
- webapp:目录专门用来存放web工程的资源文件,如 html、css、js等
- WEB-INF:目录是一个受服务器保护的目录,浏览器无法直接访问到此目录的内容
- web.xml:它是整个动态web工程的配置部署描述文件,可以在这配置很多web工程的组件,比如:Servlet程序、Filter过滤器、Listener监听器、Session超时等
- WEB-INF:目录是一个受服务器保护的目录,浏览器无法直接访问到此目录的内容
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来配置,主要用来配置Listener,Filter,Servlet等。
但需要注意的是: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.html或index.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>