Servlet
- Servlet是Server Applet的简称, “小型服务程序”,用于响应客户端的请求
- 一般使用要素
- 继承javax.servlet.http.HttpServlet, 实现doGet, doPost域service方法
- 通过request对象获取客户端的请求数据
- request.getParameter( )
- request.getParameter( )
- 通过response对象给客户端返回响应
- response.getWriter( ).write( )
- 通过注解@webServlet设置Servlet对应的请求路径
- 通过response拿到的输出流对象(比如getWriter),不需要程序员调用close关闭
- 默认情况下,一个Servlet类只会被服务器创建一个实例对象,而且是在第一次处理客户端请求才创建实例
- 注意:Servlet并没有设计成单例模式
- 建议:不要再Servlet中定义可写的成员变量,会引发线程安全问题
- 有init、destroy生命周期方法
- 可以通过注解、XML方式使用
可以使用loadOnStartup属性设置Servlet的创建时机
客户端请求的数据乱码
- request.setCharacterEncoding( “UTF-8”)
- 服务端的响应数据乱码
- response.setContentType(“text/plain; charset=UTF-8”);
- 其中“text/plain”是数据的MIMEType,根据实际情况而定
- 更多的MIMEType可以参考TOMCAT_HOME/conf/web.xml
- response.setContentType(“text/plain; charset=UTF-8”);
JSP
- JavaServer Pages, 是一种动态网页技术标准
- 指令
- <%@ page%> : 配置当前页面信息
- <%@ include%> : 包含其他页面
- <% taglib%>: 导入标签库
- 输出
- <%= 需要输出的内容%>
- 等价于out.print( 需要输出的内容)
- 嵌入Java代码
- <% Java代码%>
- 注释
- <%— 注释内容 —%>
声明
Expression Language
- ${obj.property}
empty、 not empty
JSTL 是 JSP Standard Tag Library,“JSP标准标签库”
- 导入JSTL核心标签库

转发
转发链条
- 在同一次请求中,可以转发多次,形成一个转发链条,在一个转发链条上
- 可以通过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会发生变化
- 重定向的操作由服务器 + 客户端配合完成

