分享

小余老师继续带你复习jsp笔记

 太极混元天尊 2018-05-24





7.JSP9大隐式对象

①隐式对象:是JSP中特有的,一个JSP页面新建后,不需要声明就可以直接使用的对象,这些对象默认隐藏在JSP页面中。能够很方便的开发JSP代码。JSP运行过程也是能够保证这些对象可以转换成Java代码的。

②9大隐式对象

Controller方法中可以用String[]接收,或者pojo的String[]属性接收。两种方式任选其一即可。

javax.servlet.jsp.PageContext pageContext = null;
javax.servlet.jsp.JspWriter out = null;
javax.servlet.http.HttpSession session = null;
javax.servlet.http.HttpServletRequest request
javax.servlet.http.HttpServletResponse response
javax.servlet.ServletContext application = null;
javax.servlet.ServletConfig config = null;
java.lang.Object page = this;
java.lang.Throwable exception


③分类:

⑴作用域对象:

Ⅰ.javax.servlet.jsp.PageContext pageContext = null;
详解:pageContext:只能在当前页面存数据,取数据。
实际上SUN公司在定义所有的JSP 隐式对象的时候,
使用了同一个接口----PageContext(在JSP页面中使用的所有对象,都可以从pageContext对象中得到)

属性:(int 类型)
pageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE

属性方法:
pageContext.getException()
pageContext.getPage()
pageContext.getRequest()
pageContext.getResponse()
pageContext.getServletConfig()
pageContext.getServletContext()
pageContext.getSession()
pageContext.getOut();

通过公共接口,得到保存在其他隐式对象中的数据
session.setAttribute('aaa','bbbb');
session.getAttribute('aaa');
pageContext.setAttribute('stu',stu,PageContext.SESSION_SCOPE);
pageContext.getAttribute('aaa',PageContext.SESSION_SCOPE);

Ⅱ.javax.servlet.http.HttpServletRequest request

Ⅲ.javax.servlet.http.HttpSession session = null;

Ⅳ.javax.servlet.ServletContext application = null;


⑵输入输出对象:

Ⅰ.javax.servlet.jsp.JspWriter out = null;
详解:主要用于设置响应的内容,一般指整个网页的html代码给用户看,带缓冲的输出对象,
输出字节流,缓冲区大小通过page指令指定。从响应对象中得到的输出对象,主要用于输出页
面的html代码,也可以输出文本字符串、xml字符串、JSON 字符串等。使用out只能输出字符
串,也是带缓冲的输出对象。

Ⅱ.javax.servlet.http.HttpServletResponse response
详解:主要用于设置响应头信息,方法有限,能够返回的数据也有限,给浏览器看。

Ⅲ.javax.servlet.http.HttpServletRequest request
详解:所有web程序输入的内容全部在该对象中


⑶辅助类对象:

javax.servlet.ServletConfig config = null;
java.lang.Object page = this;
java.lang.Throwable exception


8. Java中处理缓冲的两种方式

①超出缓冲区不是致命错误;在超出缓冲区时,只需刷新输出即可。自动调用 out.flush();

②超出缓冲区是致命错误;在超出缓冲区时,引发一个异常。

③JSP中两种方法都可以处理,默认会给每个页面的out分配8kb缓存空间,当缓存用完后,会自动调用flash().所以一般我们使用jsp不会见到缓存异常。

如果一个页面不运行自动清空缓存。

<%@ page autoFlush='false' %>


(1)后台得到数据后,希望一次性把所有内容全部输出到页面;

clear() throws java.io.IOException,清除缓冲区的内容。如果已经刷新缓冲区,则clear操作将抛出。IOException,指示某些数据已经不可撤消地写入了客户端响应流。

(2)后台得到数据后,一点一点的传递给页面;

clearBuffer()清除缓冲区的当前内容。与clear()不同,如果已经刷新缓冲区,此方法不会抛出 IOException。它只清除缓冲区的当前内容,然后返回。

总结:Ajax应用中,会使用out对象,默认的缓存就足够。自动导入、导出报表,后台的数据处理量较大,输出到前台就需要处理缓存,一般处理缓存的项目,都是比较复杂的项目。缓存处理不好,用户体验就会非常糟糕。


9.EL表达式

①概述:EL(Expression Language)目的:为了使JSP写起来更加简单。表达式语言的灵感来自于ECMAScript和XPath表达式语言,它提供了在JSP中简化表达式的方法。它既不是编程语言也不是脚本语言。基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到Java类中静态方法的可扩展函数以及一组隐式对象。

EL提供了一些标识符、存取器和运算符,用来检索和操作驻留在JSP容器中的数据。EL表达式只能用在JSP页面中,而且只能用于从作用域对象中读取数据,不能写入数据,也不能修改或删除数据。

②EL表达式的组成:(1)标识符 (2)存取器 (3)运算符

③EL表达式中的标识符、运算符、存取器

⑴标识符

有很多标识符,常用的有11个;很多与JSP中的隐式对象是相同的。

JSP pageContext ${pageContext.request}
    <% pageContext.getRequest() %>
   
作用域 pageScope
requestScope request.getAttribute('name');
sessionScope
applicationScope
       
请求参数 param request.getParameter('paramName');
paramValues

请求头信息 header request.getHeader();    
headerValues
   
Cookie cookie ${cookie.loginName}
Cookie[] cks = request.getCookies();
if(cks != null){for(int i=0;i Cookie c = cks[i]; //该对象中有 name value
    //判断用户名
if('loginName'.equals(c.getName())){loginname = c.getValue();}}}
   
项目 initParam ${initParam.projectName}
servletContext.getInitParameter('projectName');
初始化参数


⑵存取器

. 最常用的存取器,能够自动调用对应名称的getXXXX()
[] 从数组中取数据,或从map对象中取数据时使用
   UserInfo info = new UserInfo();
   info.setPhone('15051676451');
   User u = new User();
u.setName('aaa');
   u.setAge(20);
   u.setInfo(info);
   request.setAttribute('user',u);
   //JSP 页面中取数据使用 EL
   ${requestScope.user.name}
   ${requestScope.user.info.phone}


⑶运算符

算术运算符:+ - * /(div) %(mod)

关系运算符:>(gt) <(lt) ==(eq) !=(ne) <=(le) >=(ge)

逻辑运算符:&&(and) ||(or) !(not)

验证运算符:empty

例如:

 计算购物车中商品明细的总价:

${sessionScope.orderLines.product.price * 3}


 逻辑运算进行比较

${(x >= min) && (x <= max)}  


验证

//if(session.getAttribute('loginUser') != null)
${empty sessionScope.loginUser} == 等于null返回true
${not empty sessionScope.loginUser} == 不等于null返回true


小结:

(1)EL 表达式使用过程 。

${}--->${标识符.}--->${标识符.attributeName.}--->${标识符.attributeName.propertyName}


(2)EL 表达式只能在 JSP 页面中取值,可以通过标识符来指定取值的作用域范围,如果不指定,默认按照从小到大的范围查找。

pageScope-(找不到)->requestScope-(找不到)->sessionScope-(找不到)->applicationScope
session.setAttribute('name',value); //name 要特殊,不要冲突


(3)在El表达式中,可以使用运算符进行复杂运算。


(4)EL表达式一般是与JSTL配套使用的。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多