JavaWeb 复习讲义
原始讲义
第六部分 自测与附录

附录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 九大内置对象

对象类型作用域
requestHttpServletRequest一次请求
responseHttpServletResponse一次响应
sessionHttpSession一次会话
applicationServletContext整个应用
pageObject(当前 Servlet 实例)当前页面
pageContextPageContext当前页面,可操作其他三个域
outJspWriter输出
configServletConfig初始化参数
exceptionThrowable仅在 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。