文章目录
JavaWeb复习知识点大汇总
Maven
修改Maven默认的JDK版本
在MAVEN_HOME/conf/settings.xml
的<profiles>
标签中添加1个<profile>
<profile>
<id>jdk8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>8</jdk>
</activation>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.compilerVersion>8</maven.compiler.compilerVersion>
</properties>
</profile>
解决文件编码的警告
在pom.xml
中添加
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
IDEA新建Maven项目(Web项目)
方法一
- 使用
archetype
方法二
-
不勾选
Create from archetype
-
pom.xml
配置 -
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 模型版本 --> <modelVersion>4.0.0</modelVersion> <!-- 项目信息 --> <groupId>org.xiyoulinux</groupId> <artifactId>free_test</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包方式 --> <packaging>war</packaging> <!-- 文件编码 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> </dependencies> <!-- 构建信息 --> <build> <!-- 打包后的文件名 --> <finalName>free_test</finalName> </build> </project>
-
打开
Project Structure
, 添加web.xml
-
将
web.xml
放到src/main/webapp/WEB-INF
目录
pom.xml配置项
pom.xml
是Maven项目的核心配置文件, 根元素是project
.project
的常用子元素如下表
元素 | 描述 |
---|---|
modelVersion |
pom的版本, 目前都使用4.0.0, 是必要元素 |
groupId |
组织名称, 一般用域名的倒写 |
artifactId |
项目名称 |
version |
项目的版本号, 比如1.0.0, 3.0, 1.0-SNAPSHOT, 1.0-RELEASE |
packaging |
打包方式, 比如pom, jar(默认值), maven-plugin, ejb, war |
properties |
属性信息, 比如文本编码等 |
dependencies |
依赖信息 |
build |
构建信息, 比如插件配置等 |
Maven default生命周期(Lifecycle)的每个phase(阶段)的含义
default
生命周期由下表中的phase
组成
phase | 描述 |
---|---|
validate | 确认项目正确并且所有必要的信息均可用 |
compile | 编译项目的源代码(src/main) |
test | 使用合适的单元测试框架测试编译后的源代码(src/main, src/test) |
package | 获取编译后的代码, 并将其打包为可分发的格式, 例如jar |
verify | 对集成测试的结果进行任何检查, 以确保符合质量标准 |
install | 将软件包安装到本地存储库中, 以作为本地其他项目中的依赖项 |
deploy | 在构建环境中完成后, 将最终软件包复制到远程存储库中, 以便与其他开发人员和项目共享 |
使用命令mvn package
就会按顺序执行validate, compile, test, package阶段
常用命令
命令 | 描述 |
---|---|
mvn clean | 清除target |
mvn clean package | 先执行clean, 再执行package |
denpendency中scope的取值
compile: 默认, 编译依赖关系在所有类路径中均可用. 此外, 这些依赖项会传递到相关项目
provided: 仅在编译和测试类路径上可用, 并且不可传递. 希望JDK或容器在运行时提供它
runtime: 依赖关系不是编译所必需的, 而是运行所必需的. 它在运行时和测试类路径中, 但不在编译类路径中
test: 依赖关系对于正常使用该应用程序不是必需的, 并且仅在测试编译和执行阶段可用. 它不是可传递的
system: 必须显示提供jar的位置, 不会去Maven仓库中查找
Servlet
一些细节
-
通过response拿到的输出流对象(比如getWriter), 不需要程序员调用close去关闭
-
默认情况下, 一个Servlet类, 只会被服务器创建一个实例对象, 而且是第一次处理客户端请求才创建实例
- 注意: Serlvlet并没有设计成单例模式 ! ! !
- 建议: 不要在Servlet中定义可写(writable)的成员变量, 会引发线程安全问题
转发(forward)
在同一个Context中进行请求转发
转发链条
-
在同一次请求中, 可以转发多次, 形成一个转发链条. 在一个转发链条上
-
可以通过
request.setAttribute
,request.getAttribute
来共享数据 -
每一次转发都会创建一个新的request对象, 用成员变量request指向前一个request对象
- 在转发链条上, 所有的attribute都存储在头部的Request对象中
重定向(redirect)
重定向: 服务器通知客户端重新发送请求到新的任意URL地址
转发 vs 重定向
转发代码: request.getRequestDispatcher("/路径").forward(request, response)
- 只能转发到同一个Context下, 路径中不用包含ContextPath
- 客户端只发了一次请求
- 浏览器地址栏的URL不会发生变化
- 转发的操作只由服务器完成
重定向代码: response.sendRedirect("/路径")
-
可以重定向到任意URL, 如果重定向到同一个Context下, 路径中需要包含ContextPath
-
客户端发了两次请求
-
浏览器地址栏的URL会发生变化
-
重定向的操作由服务器+客户端配合完成
过滤器(Filter)
- 任何过滤器都要实现javax.servlet.Filter接口
- 在Filter接口的doFilter()方法中编写过滤器的功能代码
- 在web.xml中对过滤器进行配置, 说明拦截URL的范围或用注解形式