笔记之JSP语法、指令(乱码、9大隐式对象、4大域)

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,taglibTaglib和标签相关。

指令的基本语法格式:

<%@ 指令 属性名=“值”%>

例如:<%@ 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

ApplicationseveltContext 类型,代表整个应用。

Config servletConfig类型

Page代表页面本身

pageContext

OutJspWriter  writer的子类  

 带缓存功能的输出流,可通过pagebuffer属性指定缓冲大小或关闭

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方法和2include方法来简化和替代

reqeustDispatcher.forward 方法和include方法。

方法中的资源地址代表当前WEB应用

pageContext.forwoard("/message.jsp");

pageContext.include("/head.jsp");//会翻译成2servlet

<%@ 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中。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值