web笔记
本文最后更新于:几秒前
Web 笔记
过滤器作用
过滤器常用作:
- 权限控制示例:
假设我们有一个需要登录后才能访问的页面 /securePage。我们可以创建一个过滤器,在其中检查用户是否已经登录,如果未登录则重定向到登录页面。
1 | |
- 编码转换示例:
在这个示例中,我们创建一个过滤器来统一将请求和响应的字符编码设置为 UTF-8。
1 | |
过滤器注解的使用:
1 | |
此处的路径可以有这几种表达
/*:这种模式匹配所有路径,但不包括子路径。例如,如果你配置了一个 URL 模式为/*,那么它将匹配所有路径,如/home,/about,/contact等,但不会匹配子路径,如/home/user,/about/us等。/**:这种模式匹配所有路径,包括子路径(递归匹配)。如果你使用/**这样的模式,它将匹配所有路径及其子路径。例如,/home,/home/user,/about,/about/us都会被匹配。(存疑!)/specificPath/*:这种模式匹配特定路径下的所有子路径。例如,如果你配置了/specificPath/*这样的模式,它将匹配以/specificPath/开头的所有子路径,如/specificPath/page1,/specificPath/page2/subpage等。
Gson的使用
java servlet返回json数据时用到Gson,例:
1 | |
1 | |
ajax取出数据方法:
1 | |
实现实现前后端数据交流!
JDBC(防忘记)
1 | |
获取connection后即可编写SQL语句
1 | |
然后可以使用PreparedStatement来执行,这样即方便也能防止SQL注入
1 | |
执行更改直接
1 | |
即可,如果是查询,要返回值,那就要用executeQuery(),然后用ResultSet来接收。
- execute() 方法:
execute()方法用于执行任何类型的 SQL 语句,包括 DDL(数据定义语言)语句(如 CREATE、ALTER、DROP 等)、DML(数据操作语言)语句(如 INSERT、UPDATE、DELETE 等)以及 DCL(数据控制语言)语句(如 GRANT、REVOKE 等)。- 当执行
execute()方法时,它会返回一个布尔值,表示执行的 SQL 语句是否返回了结果集。如果执行的是 DDL 或 DML 语句,则返回false;如果执行的是查询语句,则返回true。- 如果 SQL 语句执行成功,并且返回了一个结果集,可以通过调用
getResultSet()方法获取该结果集。
- executeQuery() 方法:
executeQuery()方法专门用于执行查询(SELECT)语句,并且只能用于执行查询语句。- 当执行
executeQuery()方法时,它会返回一个ResultSet对象,表示查询语句执行后返回的结果集。如果查询语句没有返回结果集,那么将返回一个空的ResultSet对象。- 如果执行的 SQL 语句不是查询语句,而是 DDL 或 DML 语句,则调用
executeQuery()方法将会抛出SQLException异常。
两者的获取数据方式的区别:
- 返回值类型不同:
executeQuery方法返回一个ResultSet对象,该对象包含了查询的结果集。execute方法返回一个boolean值,表示执行SQL语句后是否返回了结果集。如果返回了结果集,需要通过getResultSet方法获取该结果集。
- 用法不同:
executeQuery方法通常用于执行SELECT语句,因为它会返回一个结果集对象,可以通过该对象遍历查询结果。execute方法可以用于执行任何SQL语句,包括SELECT、INSERT、UPDATE、DELETE等,但是在执行SELECT语句时,需要通过getResultSet方法获取结果集。
- **异常处理不同**:
executeQuery方法在执行失败时会抛出SQLException异常。execute方法在执行失败时也会抛出SQLException异常,但是在执行SELECT语句时,如果没有返回结果集,会抛出SQLException,此时需要通过getUpdateCount方法获取受影响的行数。(重点)
读取ResultSet方法如下
1 | |
ResultSet 的 next() 方法有以下作用:
- 移动指针:
ResultSet对象内部维护一个指针,初始时指向第一条记录之前的位置(称为游标)。调用next()方法会使游标向下移动一行,指向下一条记录。 - 判断是否有下一行数据:
next()方法返回一个布尔值,表示是否存在下一行数据。如果存在下一行数据,则返回true;如果已经到达结果集的末尾,没有更多数据可供读取,则返回false。
注意:resultSetObject.next仅仅返回一个bool值并移动游标,数据的获取不能通过next方法,而是通过getString(Property Colum)或getInt(Property Colum)方法获取。
label标签的for属性
for属性:
- 关联表单控件: 使用
for属性可以将label标签与对应的表单控件(如输入框、复选框、单选框等)进行关联。通过为for属性指定与之相关联的表单控件的id值,用户在点击label标签时就会触发相关联表单控件的行为,例如选中复选框或激活输入框。 - 增强可访问性: 通过将
label标签与表单控件关联,可以提高页面的可访问性。这样用户不仅可以通过点击表单控件本身来操作,还可以通过点击与之关联的label标签来触发相应行为,使得页面更易于操作和理解。
前后端数据交换
使用ajax可以实现将前端数据发送到后端,也能获取后端返回的数据。首先来说一下axios的使用方法,axios其实就是包装好了的ajax,基本使用方法如下:
1 | |
千万要注意method为post不能直接使用getParameter来获取数据,此时有两种方法:
- 前端:content-type改为
application/x-www-form-urlencoded - 后端:这样获取
1 | |
这里用到了之前提到的Gson的JsonObject类和Gson的基本使用方法。
还有,axios使用前记得加上<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>。
一些错误的解决
相当可怕的错误
过滤器中未调用
1 | |
导致所有页面全部为空白。
原因是设置的CharacterFilter过滤器是全局筛选:
1 | |
不小心删掉了代码:
1 | |
导致拦截后未放行,任何页面都等接收却不报错,把放行的代码加上问题即解决。
Tomcat控制台乱码
在Tomcat的conf目录下找到logging.properties,ctrl+f输入UTF-8,将所有的替换为GBK即可解决问题。
jsp文件调入html/js/css文件乱码
解决方法:
在WEB-INF下的web.xml文件中假如以下内容:
1 | |
原理尚不清楚。
解决maven出现插件问题方法
问题:Plugin‘org.apache.maven.plugins:maven-clean-plugin:’ not found
解决方法:

将maven home path改成如图所示的选项。
MVC分层思想
最终:
前台用
jsp实现。servlet存放在controller包下。service分为接口和实现,实现类放在service包下的serviceImpl包下。DAO同样也分为接口类和实现类,实现类放在DAO包下的DAOImpl包下。M与C层或M与M层之间数据的传递要用到一个对象,也就是
Bean对象,放在pojo包下。其余如监听器过滤器则分别放在
Filter和Listener包下。


