Skip to content

Servlet常用类和接口

1505字约5分钟

javajspservlet

2024-10-24

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.九个内置对象

内置对象名称真实类型功能
requestHttpServletRequest1.接收参数
2.操作属性
3.跳转(前向)页面
4.得到session对象
sessionHttpSession1.操作属性
2.得到application对象
applicationServletContext1.操作属性
2.获得应用程序级初始化参数
configServletConfig1.获得Servlet级初始化参数
2.得到application对象
responseHttpServletResponse1.得到out对象
2.可以跳转(重定向)页面
3.向浏览器发送cookie
pageContextPageContext1.操作属性(4个范围)
2.得到其它的8个内置对象
outPrintWriter重写了print方法,负责输出
exceptionThrowable处理异常
pageObject相当于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 个方法,对属性进行保存、获取和移除操作。

返回值类型方法作用
voidsetAttribute(String name, Object o)将属性保存到域对象中
ObjectgetAttribute(String name)获取域对象中的属性值
voidremoveAttribute(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会引起浏览器地址栏的变化(相当于浏览器重新请求了新的地址)