Jsp:
Servlet 负责响应请求,产生动态数据,存在request中,forward数据给jsp显示
JSP执行过程:服务器将JSP翻译成servlet,并将 servlet编译成.class文件执行。
Jsp翻译成servlet中,会提供8大对象。标签,换行用out.write翻译,java代码部分不变。
JSP语法:
语法:模板元素
原来html中的内容,都是模板元素
语法:脚本表达式
<%=变量或表达式%>,括号中不能有分号
中间是表达式,则是标本表达式,用来输出变量的值。
变量或表达式会被out.write 原封不动的翻译过去
<%
多行JAVA代码
%>
中间是代码,则是脚本代码,中间可以有分号
Java代码会被翻译到 service方法中。
<%! // JSP声明, 会被翻译成 servlet中的静态代码块,成员变量和方法
Public void run(){
}
%>
多个脚本片段组合后的结果必须是完整的java语句
不推荐在JSP中嵌
入JAVA代码。
JSP注释:
<%--注释--%>
JSP指令:
指令不输出任何数据,而是告诉JSP引擎如果处理JSP页面的其余部分。
JSP 的3种指令:page ,include,taglib。Taglib和标签相关。
指令的基本语法格式:
<%@ 指令 属性名=“值”%>
例如:<%@ page contentType="text/html;UTF-8"%>
一个指令有多个属性,可以写在一个指令里,也可以分开来写。
JSP指令: page指令
Page指令用于定义JSP页面的各种属性,推荐放在JSP页面的起始位置。
完整语法:
<%@ page
language="java"//嵌入的是否java代码
extends="package.class"//翻译后的servlet 的父类是谁
Import="java.util.Date"//导包。
Session="true" //是否创建session.默认为TRUE
Buffer="8KB"//输出给浏览器的缓冲大小
autoFlush="true"//缓冲满了,自动刷新
isThreadSafe="false"
Info="text"
errorPage="错误页面相对地址/相对于工程"
isErrorPage="true"//指定当前页面是否是错误页面,会创建exception 对象
contentType=""//设置页面类型
pageEncoding=""//设置页面编码方式
isElIgnored="true"//是否使用了El表达式
%>
错误页面配置到xml中,可以成为全局错误页面
专门新建一个errors文件夹,处理各种常见的错误页面
错误页面要大于1K,否则可能不显示
错误页面的page指令的isErrorPage属性设置为True,服务器调用错误页面时,会将异常封装到exception对象中传给页面。此时JSP会有第9大隐士对象exception.
根据异常类型配置:
<error-page>
<exception-type>异常的完整类名</excetpion-type>
<location>/error/error.jsp</location>
</error-page>
根据状态码配置:
<error-page>
<error-code>404</error-code>
<location>/error/error.jsp</location>
</error-page>
JSP乱码问题:
解决办法:
<%@ page pageEncoding=
"UTF-8" content-type="text/html;charset=gb2312"%>
开发中pageEncoding设置后,content-type系统会自动设置
Jsp指令:include
Include指令用于引入其他JSP页面。被引入的JSP中不能包含HTML标签
引入的JSP和原来的JSP,会被翻译到同一个servlet中。
<%@ include file="/head.jsp"%>
细节:
是给服务器用的,/ 代表当前WEB应用
被引入文件可以用任意扩展名,建议使用.jspf
被引入JSP和原来的JSP指令不能冲突
JSP指令:taglib
用于导入标签库
9大隐士对象:
Request,response,out,session,exception,application,config,
page,pageContext
Application是seveltContext 类型,代表整个应用。
Config 是servletConfig类型
Page代表页面本身
pageContext
Out是JspWriter writer的子类
带缓存功能的输出流,可通过page的buffer属性指定缓冲大小或关闭
out细节:
因为标签和空格是用out输出,所以,JSP中使用字节流会出异常
解决办法:删除所有的标签和空格
pageContext对象:JSP中最重要对象,代表JSP页面的运行环境。
封装了对其他8大对象的引用,本身也是域(可存取数据),封装了WEB开发的常用操作(引入,跳转等)。
通过pageContext获得其他隐士对象:
参考JSP文档
getException()
getPage()
。。。。。
setAttribute("name","xxxxxx");//数据的作用域限于当前页面
getAttribute();
removeAttribute();
4大域:pageContext----request-------session--------application
pageContext还提供了访问其他域的方法:
pageContext.getAttribute("data",PageContext.REQUEST_SCOPE);//第二个参数指定要访问的域
pageContext.setAttribute("data","xxx",PaContext.APPLICATION_SCOPE);
pageContext.setAttribuete("data","xxx");//不指定域,则是在pageContext域
自动依次从4个域中查找数据:
pageContext----request-------session--------application
pageContext.findAttribute("data");//4个域都没有才返回NULL
pageContext定义了一个forward方法和2个include方法来简化和替代
reqeustDispatcher.forward 方法和include方法。
方法中的资源地址/ 代表当前WEB应用
pageContext.forwoard("/message.jsp");
pageContext.include("/head.jsp");//会翻译成2个servlet
<%@ include file="/head.jsp"%>//会翻译成一个servlet,效率高(推荐)
JSP标签:
也称jspAction ,JSP动作元素
JSP常用标签:
<jsp:include>//<jsp:include page="/1.jsp"></jsp:include>
<jsp:forward>实现转发
<jsp:param>//<jsp:param name="data" value=""/>可以设置参数
引入页面就有了3种方式:
推荐使用标签和指令。
pageContext.include()
<%@ include file=""%>
<jsp:include=""></jsp:include>
JSP地址映射:
默认不需要映射。
可在XML中映射成其他地址:
<servelt>
<servlet-name>xxxx</servlet-name>
<jsp-file>/5.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servelt-name>xxxx</servlet-name>
<url-pattern>/1.html</url-pattern>
</servlet-mapping>
Jsp错误检查:
1.JSP语法错误//不能编译成class
2.翻译成Servlet错误 //不能装载这个类
3.Servlet运行时错误//service抛异常
WEB开发的4个域对象:
域的作用范围:就是域对象的生命周期
pageContext:页面范围内
Request:请求范围内。产生的数据看完就没用的东西(例如:新闻)
Session:会话范围内。第一次访问创建,30分钟后销毁(产生的数据现在看完,等会儿还要用,例如购物车,验证码)
Application:产生的数据,自己用完了,等会儿别人还要用。(聊天)
请求转发:是同一次请求,可以存储到request中
请求重定向:是2次不同的不同的请求,不同的request,所以不能存储到request中。