02-JSP 9大内置对象

1. 9大内置对象

能够在jsp页面上直接使用这些对象,一共有9个。
9大对象就是jsp页面翻译成java文件中创建的对象,所以可以可以在jsp页面中直接使用。

  1. page:页面对象,java.lang.Object类型的page对象
  2. request:HttpServletRequest,javax.servlet.http.HttpServletRequest类型的request对象
  3. response:HttpServletResponse,javax.servlet.http.HttpServletResponse类型的response对象
  4. session:HttpSession,javax.servlet.http.HttpSession类型的session对象
  5. application:ServletContext,javax.servlet.ServletContext类型的application对象
  6. out:JspWriter,javax.servlet.jsp.JspWriter类型的out对象
  7. config:ServletConfig,javax.servlet.ServletConfig类型的config对象
  8. exception:Throwable,java.lang.Throwable类型的exception对象
  9. pageContext:pageContext,javax.servlet.jsp.PageContext类型的pageContext对象

2. 4大域对象

  1. pageContext: 作用在当前页面

代表 page 域,但是 jsp 中 page 它的类型是 Object,所以操作 page 域我们使用的是 pageContext 对象,page 域就是指当前页面

  1. request: 作用在一次请求,对应 Servlet 域对象:HttpServletRequest
  2. session: 作用在一次会话,对应 Servlet 域对象:HttpSession
  3. application: 作用在整个项目,对应 Servlet 域对象:ServletContext

3. pageContext 域对象

作用:获取/操作其他的内置对象、操作域

  • 获取其他的内置对象
    • 没有获取 out 内置对象
1
2
3
4
5
6
7
8
9
<%
pageContext.getPage();//获取内置对象page
pageContext.getRequest();//获取内置对象request
pageContext.getResponse();//获取内置对象response
pageContext.getSession();//获取内置对象session
pageContext.getServletContext();//获取application
pageContext.getServletConfig();//config
pageContext.getException();//exception
%>
  • 操作域
    • 操作page域:作用范围只在当前页面
1
2
3
4
5
6
7
8
9
10
<%
//往pageContext域中存储了一个msg变量
pageContext.setAttribute("msg" ,"hello page msg");
%>

<%
//往pageContext域中存储了一个msg变量
Object msg = pageContext.getAttribute("msg");
System.out.println(msg);
%>
  • 操作其他域
    • request域
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
//定义变量的意义! 提高复用性! 提高可维护性!
//String name : 参数名称
//Object value : 参数值
//int scope : 操作的域
pageContext.setAttribute("msg1","hello page1",PageContext.REQUEST_SCOPE);
//请求转发
request.getRequestDispatcher("/demo06.jsp").forward(request,response);
%>

<%
//变量msg1定义到_jspService方法中
Object msg1 = request.getAttribute("msg1");
System.out.println("msg1 : "+msg1);

Object msg11 = pageContext.getAttribute("msg1", PageContext.REQUEST_SCOPE);
System.out.println(msg11);
%>
  • session域
1
2
3
<%
pageContext.setAttribute("msg2","hello page2",PageContext.SESSION_SCOPE);
%>
  • application域
1
2
3
<%
pageContext.setAttribute("msg3","hello page3",PageContext.APPLICATION_SCOPE);
%>

4. jsp优化登录案例

现在方案:

  • login.jsp 登录页面、显示错误信息
  • LoginServlet 处理登录请求、业务处理、调用dao,操作数据
  • index.jsp 显示用户名

代码实现:

login.jsp

1
2
3
4
5
6
7
8
<%--显示错误信息--%>
<%="<font color='red'>" + (request.getAttribute("errorMsg") == null ? "" : request.getAttribute("errorMsg") ) + "</font>"%>
<form action="/demo/user" method="post">
<input type="hidden" name="methodName" value="login"/>
账户:<input type="text" name="username"/><br>
密码:<input type="text" name="password"/><br>
<button type="submit">登录</button>
</form>

index.jsp

1
2
3
4
5
6
7
8
9
10
11
<%
String username = (String) session.getAttribute("username");
if (null == username) {
//不在登录状态
out.write("您还没有登录;");
out.write("<a href='/day62/login.jsp'>请登录</a>");
} else {
//在登录状态
out.write("欢迎回来~~~"+username);
}
%>

在 jsp 优化后目前存在的问题:

  • jsp页面还存在java代码(后台代码)和html代码(前端代码)融合在一起的问题!
  • 一定程度解决,可能需要jstl标签库。
  • 彻底解决,得使用vue + html

02-JSP 9大内置对象
https://janycode.github.io/2017/05/29/04_网页技术/05_JSP/02-JSP 9大内置对象/
作者
Jerry(姜源)
发布于
2017年5月29日
许可协议