第六部分 自测与附录
附录C 三十条高频易错点清单
考前最后一遍,只看这张表。每一条都是"看起来会、一写就错"的地方。
HTML / CSS
- 表单控件没有
name属性,数据不会被提交,只写id不够。 <td colspan>是跨列,rowspan是跨行,口诀"col 是 column(列)"。<br>只换行不加空行,<p>自带上下间距。id在一个页面必须唯一,class可以重复。- CSS 权重:内联 1000 > id 100 > class 10 > 元素 1;
!important直接压过一切。 box-sizing: content-box(默认)时 width 只算内容区,加了 padding 和 border 会变宽。- 行内元素设
width/height无效,要改display: inline-block或block。
JavaScript
var有变量提升、无块级作用域;let有块级作用域;const声明后不能重新赋值。"5" == 5为 true(隐式转换),"5" === 5为 false(类型不同)。parseInt("12px")得 12,parseInt("px12")得NaN。onclick绑定的是函数引用,写成btn.onclick = f()会立即执行。onsubmit里return false才能阻止提交,只写false没用。document.getElementById取不到元素时返回null,直接访问属性就会报错,所以脚本要放在</body>前或DOMContentLoaded里。
HTTP / Tomcat
- GET 的参数在 URL 上,不在请求体;POST 的参数在请求体。
- GET 可缓存、可收藏、幂等;POST 都不行。
- 302 是重定向,304 是"资源没变,用缓存",两者完全不同。
- 404 是路径问题(请求没进代码),500 是代码问题(进去了但抛异常)。
Content-Type里的charset决定浏览器用什么编码解析,写错就乱码。
Servlet
- Servlet 是单实例多线程,成员变量会被并发共享,能用局部变量就别用成员变量。
init()和destroy()各调用一次,service()每次请求都调。loadOnStartup大于等于 0 时,服务器启动就创建实例;默认是第一次访问才创建。urlPattern优先级:精确匹配 > 目录匹配(/user/*)> 扩展名匹配(*.do)> 默认(/),/*会吃掉所有请求包括静态资源。getWriter()与getOutputStream()同一次响应里只能用一个。setCharacterEncoding必须在getParameter之前;response.setContentType("text/html;charset=UTF-8")要写在getWriter()之前。
转发与重定向
- 转发是服务器行为(1 次请求,地址栏不变,request 域共享);重定向是浏览器行为(2 次请求,地址栏变,域丢失)。
- 重定向地址必须加
getContextPath(),否则会跳到域名根下。
会话
setMaxAge(0)是删除 Cookie;负数才是会话级 Cookie。- 关闭浏览器不等于 Session 销毁:服务端 Session 还在,只是浏览器丢了
JSESSIONID。 - Cookie 单个约 4KB,且不能存中文(要
URLEncoder编码)。
JSP / JDBC
${}取不到值输出空串不报错,这是它与<%= %>最大的差别。c:forEach用之前必须写<%@ taglib prefix="c" ... %>,否则标签原样输出。PreparedStatement的下标从 1 开始。- 模糊查询要写
like ?,参数值为"%" + name + "%";写成like '%?%'占位符在引号内,永远匹配不到。 - 资源释放顺序是"先开后关":
ResultSet→Statement→Connection。