Java 动态页面技术 之 jsp
动态页面技术(JSP/EL/JSTL)
php,asp(.net):在html中嵌套响应语言 java不行
servlet技术:在java代码中嵌套html response.getWriter().write("<html>");
jsp技术:在html中嵌套java代码,擅长写html代码 本质是servlet
JSP技术
jsp在创建/修改后第一次被访问时会被Web容器翻译成servlet,再执行
第一次访问---->helloServlet.jsp--(jsp后缀的运行JspServlet生成)
-->helloServlet_jsp.java(在Tomcat的work目录中)---->编译运行
<html代码> 翻译到service方法内out.write("<html>");
<%java代码%> 翻译到service方法内 不能写方法
<%=java变量或表达式> 翻译到service方法内 out.print() 输出到前端
<%!java代码%> 翻译成servlet的成员变量/方法
Html注释 :<!--注释--> jsp源码、翻译后的servlet、html源码
java注释 ://单行 /*多行*/ jsp源码、翻译后的servlet
jsp注释 :<%--注释--%> jsp源码
jsp指令
1)page指令 当前页面的信息(实际开发中默认)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
language :jsp脚本的嵌入语言
pageEncoding :当前jsp文件编码(它包含contentType)
contentType :翻译成response.setContentType(text/html;charset=UTF-8)
session :翻译时自动创建session 默认=true
import :导入java的包 写类名+Alt+/
errorPage :当前页面出错(500)后跳转到哪个页面 =http://...
isErrorPage :出错后跳转的页面设置 =true
WEB项目访问报错 跳转 设置web.xml errorPage优先于web.xml的设置
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
2)include指令 包含其他页面(静态包含:写入同一个servlet)
<body>
<%@ include file=""/header.jsp""%>将header.jsp页面嵌入页面中
这是正文
</body>
3)taglib指令 引入标签库(jstl标签库、struts2标签库)
格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
jsp动作标签
页面包含:<jsp:include page="被包含的页面"/>
(动态包含 翻译成两个servlet 运行时引入)
请求转发:<jsp:forward page="要转发的资源" />
跳转/包含页面指定参数:<jsp:param name=" " value=" ">
jsp内置/隐式对象
jsp被翻译成servlet后,service方法中有9个对象定义并初始化,
可以在jsp文件中直接使用
名称 类型 描述
out javax.servlet.jsp.JspWriter 用于页面输出 字符流
request javax.servlet.http.HttpServletRequest 客户端请求信息
response javax.servlet.http.HttpServletResponse 服务端响应信息
config javax.servlet.ServletConfig 服务器配置,获取初始化参数 init()方法中
session javax.servlet.http.HttpSession 客户端会话信息
application javax.servlet.ServletContext WEB项目信息
page java.lang.Object 当前页面转换后的Servlet类的实例(类似this)
pageContext javax.servlet.jsp.PageContext 该JSP的页面容器
exception java.lang.Throwable JSP页面的异常,在错误跳转页中才有 存储错误信息
(1)out对象 字符缓冲流 向客户端输出内容----out.write()
out缓冲区数据 要先刷到response缓冲区 再 被Tomcat获取内容
<%@ page buffer="8kb"> out缓冲区大小 默认8kb
buffer="0kb" 关闭out缓冲区 内容直接写到respons缓冲器
(2)pageContext域对象 jsp页面的上下文对象
pageContext.setAttribute(String name,Object obj) //page域
pageContext.setAttribute(String name,Object obj,int scope)//(键, 值, 域)
request域: pageContext.REQUEST_SCOPE
session域: pageContext.SESSION_SCOPE
application域: pageContext.APPLICATION_SCOPE
pageContext.getAttribute(String name)
pageContext.getAttribute(String name,int scope)
pageContext.removeAttrbute(String name)
pageContext.removeAttrbute(String name,int scope)
<%
//request.setAttribute("name", "zhangsan");
pageContext.setAttribute("name", "lisi",pageContext.REQUEST_SCOPE);
String name=
(String)pageContext.getAttribute("name", pageContext.REQUEST_SCOPE);
%>
pageContext.findAttribute(String name)//从域(范围由小到大)中找
<%=pageContext.findAttribute("name")%
域范围(由小到大)page域<request域<session域<application域
page域 :当前jsp页面
request域 :一次请求
session域 :一次会话
application域 :整个web应用
pageContext可获得其他8大隐式对象 方法传参时只需要传pageContext
pageContext.getRequest() pageContext.getSession()