第六部分 自测与附录
附录B 核心 API 速查表
这一节是"查得到就不用背"的部分。真正要背的是方法名,参数顺序可以在 IDE 里补全。
B.1 HttpServletRequest
| 方法 | 作用 | 备注 |
|---|---|---|
getParameter(String name) | 取单个请求参数 | 返回 String,没有则返回 null |
getParameterValues(String name) | 取同名参数的多个值 | 复选框场景,返回 String[] |
getParameterMap() | 取全部参数 | 返回 Map<String, String[]> |
setCharacterEncoding(String) | 设置请求体编码 | 必须在第一次 getParameter 之前调用 |
getRequestURI() | 取请求路径(不含协议域名端口) | 过滤器里判断放行常用 |
getContextPath() | 取项目虚拟路径 | 拼重定向地址必用 |
getMethod() | 取请求方式 | GET / POST |
setAttribute(String, Object) | 往 request 域存数据 | 只在一次请求内有效 |
getAttribute(String) | 从 request 域取数据 | 转发后可取,重定向后取不到 |
getRequestDispatcher(String).forward(req, resp) | 请求转发 | 地址栏不变,可共享 request 域 |
getSession() | 取会话,没有就创建 | 等价于 getSession(true) |
getSession(boolean create) | 取会话,可指定是否创建 | false 时没会话返回 null |
getCookies() | 取请求带来的所有 Cookie | 返回 Cookie[],可能为 null |
getHeader(String) | 取请求头 | 如 User-Agent |
B.2 HttpServletResponse
| 方法 | 作用 | 备注 |
|---|---|---|
setStatus(int) | 设置状态码 | 如 setStatus(302) |
sendError(int, String) | 发送错误状态码与提示 | 如 sendError(404, "资源不存在") |
sendRedirect(String) | 重定向 | 内部就是 302 + Location |
setHeader(String, String) | 设置响应头 | 如 setHeader("Content-Type", ...) |
setContentType(String) | 设置响应类型与编码 | text/html;charset=UTF-8 |
getWriter() | 取字符输出流 | 输出文本,与 getOutputStream 互斥 |
getOutputStream() | 取字节输出流 | 输出二进制(文件下载) |
addCookie(Cookie) | 向响应添加 Cookie | 浏览器收到后保存 |
B.3 Cookie 与 HttpSession
| 类/方法 | 作用 |
|---|---|
new Cookie(String name, String value) | 创建 Cookie,值不能含中文与分号 |
cookie.setMaxAge(int) | 正数=秒;0=立即删除;负数=会话级(关浏览器即失效) |
cookie.setPath(String) | 设置生效路径,默认是当前目录及子目录 |
cookie.setDomain(String) | 设置生效域名(跨子域共享) |
cookie.getName() / getValue() | 读取 |
session.setAttribute(String, Object) | 往会话域存数据 |
session.getAttribute(String) | 取数据 |
session.removeAttribute(String) | 删单个 |
session.invalidate() | 让整个会话立即失效(注销登录) |
session.getId() | 取 JSESSIONID |
session.setMaxInactiveInterval(int) | 设置超时秒数(默认 1800 秒) |
B.4 JSP 九大内置对象
| 对象 | 类型 | 作用域 |
|---|---|---|
request | HttpServletRequest | 一次请求 |
response | HttpServletResponse | 一次响应 |
session | HttpSession | 一次会话 |
application | ServletContext | 整个应用 |
page | Object(当前 Servlet 实例) | 当前页面 |
pageContext | PageContext | 当前页面,可操作其他三个域 |
out | JspWriter | 输出 |
config | ServletConfig | 初始化参数 |
exception | Throwable | 仅在 isErrorPage="true" 的页面可用 |
四个域从小到大:page < request < session < application。EL 的 ${name} 默认按这个顺序从小到大找,找到就停,所以同名变量在 request 域会"盖住"session 域。
B.5 EL 隐式对象与 JSTL 常用标签
EL 的 11 个隐式对象:pageScope、requestScope、sessionScope、applicationScope、param、paramValues、header、headerValues、cookie、initParam、pageContext。
| 标签 | 用途 | 关键属性 |
|---|---|---|
<c:if test=""> | 条件判断 | test 为 true 才输出内容 |
<c:choose> + <c:when> + <c:otherwise> | 多分支 | 相当于 switch |
<c:forEach items="" var="" varStatus=""> | 遍历 | varStatus.count 从 1 开始,index 从 0 开始 |
<c:set var="" value="" scope=""> | 存值 | scope 可指定域 |
<c:remove var=""> | 删值 | |
<c:url value=""> | 拼接带项目路径的 URL | 自动处理 ;jsessionid |
【对比】${} 与 <%= %> 的关键差别:前者取不到值时输出空字符串,不报错;后者是 Java 表达式,变量不存在会编译失败或抛异常。所以页面渲染用 EL,调试打日志用 <%= %>。
B.6 JDBC 核心接口
| 接口/方法 | 作用 |
|---|---|
Class.forName("com.mysql.cj.jdbc.Driver") | 注册驱动(JDBC 4.0 后可省略,但显式写更稳) |
DriverManager.getConnection(url, user, pwd) | 获取连接 |
conn.prepareStatement(String sql) | 预编译 SQL,返回 PreparedStatement |
pstmt.setXxx(int index, Xxx value) | 给第 index 个占位符赋值,下标从 1 开始 |
pstmt.executeUpdate() | 执行增删改,返回影响行数 |
pstmt.executeQuery() | 执行查询,返回 ResultSet |
rs.next() | 游标下移一行,有数据返回 true |
rs.getXxx(String columnLabel) | 按列名取值 |
conn.setAutoCommit(false) / commit() / rollback() | 手动事务 |
close() | 释放资源,顺序:ResultSet → Statement → Connection |
【易错点】setXxx 的下标从 1 开始,这一点与数组、集合从 0 开始的习惯冲突最大,几乎每个人第一次都会写成 0。