观察jsp转换后的java代码中的_jspService方法
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException
{
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
...
...
Throwable exception =
org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
<% 我们自己写的代码 %>
}
所以我们在自己写的<% %>代码里,就可以直接使用:request、response、pageContext、session、application、config、out、pag这八个隐含对象(还有一个exception)。
注册与配置JSP页面的访问路径
微信公众号:JavaWeb架构师JSP与Servlet的应用比较
- JSP是一种以产生网页显示内容为中心的WEB开发技术,它可以直接使用模版元素来产生网页文档的内容。
- JSP页面的源文件要比Servlet源文件简单,并且JSP页面的开发过程要比Servlet的开发过程简单得多。
- JSP引擎可以对JSP页面的修改进行检测,并自动重新翻译和编译修改过的JSP文件。
- JSP技术是建立在Servlet技术基础之上的,所有的JSP页面最终都要被转换成Servlet来运行。
- 在大型WEB应用程序的开发中,Servlet与JSP经常要混合使用,各司其职,Servlet通常用作控制组件,并处理一些复杂的后台业务,JSP则作为显示组件。
- 一次响应过程可以划分成几个功能模块来协同完成,首先由Servlet完成流程控制和业务处理,并将结果数据存储在request或session域中,然后将请求转发(forward)到JSP页面,再由JSP页面从request或session域中取出结果数据并完成响应内容的输出。通过这种方式实现业务逻辑与显示内容的分离,从而将应用程序开发者和网页作者的工作分离。
out隐式对象
- 在JSP页面中应使用out隐式对象来向客户端发送文本形式的实体内容。
- out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
- JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
- JSP页面中的out隐式对象相当于插入到ServletResponse.getWriter方法返回的PrintWriter对象前面的缓冲包装类对象。
- 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
- 设置page指令的buffer属性关闭了out对象的缓存功能
- 写入到out对象中的内容充满了out对象的缓冲区
- 整个JSP页面结束
pageContext对象
- pageContext对象简介
- 获得其他隐式对象
- 引入和跳转到其他资源
- 访问各个域范围中的属性
pageContext对象简介
- pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。
- PageContext类中定义了一个setAttribute方法来将对象存储进pageContext对象内部的一个HashMap对象中,同时也定义了一个getAttribute方法来检索存储在该HashMap对象中的对象。
PageContext类除了可以存储和检索自身中的属性对象外,还定义了可以存储和检索其他域范围内的属性对象的方法。
获得其他隐式对象
- getException方法返回exception隐式对象
- getPage方法返回page隐式对象
- getRequest方法返回request隐式对象
- getResponse方法返回response隐式对象
- getServletConfig方法返回config隐式对象
- getServletContext方法返回application隐式对象
- getSession方法返回session隐式对象
- getOut方法返回out隐式对象
引入和跳转到其他资源
- PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和RequestDispatcher.include方法的调用:
- public void forward(java.lang.String relativeUrlPath)
throws javax.servlet.ServletException,java.io.IOException - public void include(java.lang.String relativeUrlPath)
throws javax.servlet.ServletException,java.io.IOException
public void include(java.lang.String relativeUrlPath,boolean flush)
throws javax.servlet.ServletException,java.io.IOException
- public void forward(java.lang.String relativeUrlPath)
- 传递给这些方法的资源路径都只能是相对路径,如果路径以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前JSP所映射到的访问路径。
测试代码
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 脚本代码编写在下面(不仅仅可以编写Java代码)-->
<%
Date date = new Date();
%>
<%
System.out.println(date); //这两段代码其实是在一个方法中的(可以去看java文件)
%>
<%
/*
1.第一个隐含对象:HttpServletRequest request
- 说明:这个request就是前面学习的doXxx方法里面的request
*/
String name = request.getParameter("name");
System.out.println("name: " + name);
//http://localhost:8080/Course_010_FirstJSP/index.jsp?name=mac
//name: mac
/*
2.第二个隐含的对象:HttpServletResponse response
- 说明:这个request就是前面学习的doXxx方法里面的response
- 基本不会用到这个对象的方法
*/
/*
3.第三个隐含对象: PageContext pageContext
-说明:这是页面的一个上下文
-可以从这里获取当前页面的几乎一切信息,包括另外8个对象
-后面再仔细学习
*/
/*
4.第四个隐含对象: HttpSession session
-说明:代表浏览器和服务器的一次会话
-后面再仔细学习
*/
/*
5.第五个隐含对象: ServletContext application
-说明:代表了当前web应用。
*/
String user = application.getInitParameter("user");
System.out.println("user: " + user); //root
/*
6.第六个隐含对象: ServletConfig config
-说明:当前JSP对象的Servlet的对象。
-几乎不使用。
-使用JSP的时候,它的servlet-class改成jsp-file
*/
String users = config.getInitParameter("users");
System.out.println("users: " + users);
/*
7.第七个隐含对象: JspWriter out
-说明:可以直接内容打印到浏览器上
*/
out.println("uers: " + users);
/*
8.第八个隐含对象: Object page = this;
-说明:代表了当前的Servlet对象
-几乎不使用
*/
/*
9.第九个隐含对象: Throwable exception
-说明:只有在页面类型为Error的情况下这个对象才能使用(isErrorPage="true")
-后面学习
*/
%>
</body>
</html>
其它
- 源码下载
关注下方公众号,回复:javaweb_course.code
-
欢迎加入交流群:451826376
-
更多信息:www.itcourse.top
网友评论