外观
Servlet常用类和接口
1.JSP的九个内置对象
JSP内置对象(9个内置对象): 1.PageContext javax.servlet.jsp.PageContext JSP的页面容器
2.request javax.servlet.http.HttpServletrequest 获取用户的请求信息 3.response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息 4.session javax.servlet.http.HttpSession 用来保存每一个用户的信息
5.application javax.servlet.ServletContext 表示所有用户的共享信息 6.config javax.servlet.ServletConfig 服务器配置信息,可以取得初始化参数 7.out javax.servlet.jsp.jspWriter 页面输出 8.page java.lang.object) 9.exception java.lang.Throwable
四种属性范围: page(pageContext):只在一个页面中保存属性。 跳转之后无效。 request:只在一次请求中有效,服务器跳转之后有效。 客户端跳无效 session:再一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效 application:在整个服务器上保存,所有用户都可使用。 重启服务器后无效 注意:如果设置过多的application属性范围会影响服务器性能。
1.九个内置对象
内置对象名称 | 真实类型 | 功能 |
---|---|---|
request | HttpServletRequest | 1.接收参数 2.操作属性 3.跳转(前向)页面 4.得到session对象 |
session | HttpSession | 1.操作属性 2.得到application对象 |
application | ServletContext | 1.操作属性 2.获得应用程序级初始化参数 |
config | ServletConfig | 1.获得Servlet级初始化参数 2.得到application对象 |
response | HttpServletResponse | 1.得到out对象 2.可以跳转(重定向)页面 3.向浏览器发送cookie |
pageContext | PageContext | 1.操作属性(4个范围) 2.得到其它的8个内置对象 |
out | PrintWriter | 重写了print方法,负责输出 |
exception | Throwable | 处理异常 |
page | Object | 相当于this |
JSP 的内置对象主要有以下特点:
- 由 JSP 规范提供,不用编写者实例化;
- 通过 Web 容器实现和管理;
- 所有 JSP 页面均可使用;
- 只有在脚本元素的表达式或代码段中才能使用。
1.request的接受参数功能
1.接受显式参数
// 获取单个参数
String a = request.getParameter("a");
// 获取参数数组
String[] p = request.getParameterValues("hobby");
// 获取参数的Map集合
Map<String,String[]> map = request.getParameterMap();
// 获取参数名的集合
Enumeration n = request.getParameterNames();
while(enu.hasMoreElements()){
String name = (String)enu.nextElement();
String value = request.getHeader(name);
}
2.接收隐式参数
//取出全部头信息
Enumeration enu = request.getHeaderNames();
while(enu.hasMoreElements()){
String name = (String)enu.nextElement();
String value = request.getHeader(name);
}
// 获取客户端协议
String strProtocol=request.getProtocol();// HTTP/1.1
String sc = request.getScheme();// http
// 获取客户提交信息的页面的路径
String strServlet=request.getServletPath();
// 获取客户提交信息的方式,get|post。
String strMethod = request.getMethod();
// 获取HTTP头文件中的accept、accept-encoding和Host的值。
String strHeader = request.getHeader("accept");
// 获取客户的IP地址。
String strIP = request.getRemoteAddr();
// 获取客户机的名称。
String clientName = request.getRemoteHost();
// 获取服务器主机名
String serverName = request.getServerName();
// 获取服务器的端口号。
int serverPort = request.getServerPort();
2.四个作用域(数据域、相当于银行,用来存储属性)
作用域 | 描述 | 作用范围 |
---|---|---|
page | 如果把属性保存到 pageContext 中,则它的作用域是 page。 | 该作用域中的属性只在当前 JSP 页面有效,跳转页面后失效。 |
request | 如果把属性保存到 request 中,则它的作用域是 request。 | 该作用域中的属性只在当前请求范围内有效。 服务器跳转页面后有效,例如jsp:forward; 客户端跳转页面后无效,例如超链接。 |
session | 如果把属性保存到 session 中,则它的作用域是 session。 | 该作用域中的属性只在当前会话范围内有效,网页关闭后失效。 |
application | 如果把属性保存到 application 中,则它的作用域是 application。 | 该作用域中的属性在整个应用范围内有效,服务器重启后失效。 |
JSP 中的 4 个域对象都能通过以下 3 个方法,对属性进行保存、获取和移除操作。
返回值类型 | 方法 | 作用 |
---|---|---|
void | setAttribute(String name, Object o) | 将属性保存到域对象中 |
Object | getAttribute(String name) | 获取域对象中的属性值 |
void | removeAttribute(String name) | 将属性从域对象中移除 |
3.数据域的特点
1.类似Map集合,存在服务器的一种数据结构
2.可以对属性进行增删改查
3.request:可经过请求链上的多个servlet(request.getRequestDispatcher("test.jsp").forward(request,response);)使用forword进行跳转(客户端跳转无效)
4.session:连接多个请求的数据结构,一个用户的多次请求在session中(关闭网页即消失)
5.appliction:在整个应用程序中存储数据(服务器停止即消失)
6.page:只在当前页面存储数据,切换页面失效)
4.参数与属性的区别
1.来源不同:参数是从客户端传递过来的信息,属性是服务端存储,在服务端的不同servlet之间传递数据
2.数据类型不同:参数是String/String[]类型的而属性的Object
3.任务及用途不同:参数是将客户端的信息传递到服务端,需要经过网络通信。属性是在控制器(Servlet)之间传递数据及控制器传递数据到视图(jsp)
注意:JSP一定是工作中服务端,Tomcat容器中,不在浏览器工作
5.forward与redirect的区别
1.两者都可以进行页面的跳转
2.跳转的机制不同:fowword是在服务端跳转,redirect相当于是给浏览器发送了3XX的响应,使浏览器重新请求另一个页面
3.请求次数不同:forword始终是同一个请求,redirect是多次请求,forward效率更高
4.在request数据域中设置的属性在redirect之后不存在,而forward之后仍然可以获取到
5.forward不好引起浏览器地址栏的变化而redirect会引起浏览器地址栏的变化(相当于浏览器重新请求了新的地址)