JavaWeb之Jsp/EL(八)
JSP(Java Server Page)
1. jsp简单介绍
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术 JSP这门技术的最大的特点在于,写jsp就像在写html,但: 它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据 相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版
2. jsp应用
servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。其原因为,程序的数据通常要美化后再输出: 让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。 让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。 因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做 即Servlet不再负责显示页面,而由JSP来完成!而Servlet专注与控制层内容!
3. jsp原理
当客户请求的是JSP页面时,服务器会查看JSP对应的Servlet是否存在,如果存在,那么直接调用Servlet的service()方法来处理请求。如果不存在,那么服务器会先把JSP编译成.java,再把.java编译成.class,然后调用service()方法。当这个JSP页面,第二处理请求时,就直接调用直身的service()方法了
4. jsp代码块
<%...%>:代码片段。代码片段会原模原样的出现在真身中,不会有变动。正常的Java代码都可以在代码片段中出现; <%=…%>:表达式。表达式会在“真身”中输出,例如:<%=a%>,对应真身中的out.print(a) <%!...%>:声明。声明对应“真身”中的属性和方法 jsp注释 <%-- … --%>,注释中的内容会被JSP编译系统忽略! HTML的注释:<!-- … -->,因为最终向客户端响应的内容还是HTML,所以在HTML注释中的内容还是看不到的
5. JSP隐藏(隐含、内置)对象
隐藏对象是在JSP页面中无需创建就可以直接使用的变量 Request javax.servlet.http.HttpServletRequest Response javax.servlet.http.HttpServletResponse Config javax.servlet.ServletConfig Page 当前Servlet实例this session javax.servlet.http.HttpSession application java.servlet.ServletContext exception java.lang.Throwable Out javax.servlet.jsp.JspWriter pageContext javax.servlet.jsp.PageContext
6. Jsp四大域对象
pageContext 对象是PageContext类型,本身是域对象,而且还可以操作所有域对象,还可以获取其他隐藏对象 操作所有域(四个域): 可以使用pageContext对象操作所有域对象,在getAttribute()、setAttribute()、removeAttribute()三个方法中多添加一个参数,int scope来指定范围。在PageContext类中包含四个int类型的常量表示四个范围: REQUEST_SCOPE:request范围 SESSION_SCOPE:session范围 APPLICATION_SCOPE:application范围
7. pageContext对象获取隐藏对象
获取其他隐藏对象:可以使用pageContext获取其他隐藏对象。 JspWriter getOut():获取out隐藏对象; ServletConfig getServletConfig():获取config隐藏对象; Object getPage():获取page隐藏对象; ServletRequest() getRequest():获取request隐藏对象; ServletResponse() getResponse:获取response隐藏对象; HttpSession getSession():获取session隐藏对象; ServletContext getServletContext():获取application隐藏对象; JspException getException():获取exception隐藏对象转换后的JspException对象
8. jsp指令
<%@指令名 属性名="值" 属性名="值" %>一般都会把JSP指令放到JSP文件的最上方,但这不是必须的 JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令 注意: Tomcat编译系统会根据JSP的指令信息来编译JSP,生成Java文件。 在生成的Java文件中,不存在指令信息! ---------------page指令-->import属性--------------- import="java.util.*,java.text.*" <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> errorPage="error.jsp" 还可以配置web.xml配error-page,如果都配置了并且能处理,那么用errorPage isErrorPage="false" 是一个exception开关,改为true就有 isELIgnored="false"不会忽略EL, contentType="text/html; charset=UTF-8"与response.setContentType()一样 pageEncoding="UTF-8":指明了保存和读取jsp页面时采用什么编码 在没有contentType时,同时还有contentType的作用 autFlush和buffer一般我们也不会去特意设置,都是保留默认值 常用的属性: import pageEncoding ---------------iweb.xml配置error页面--------------- <error-page> <error-code>500</error-code> <location>/error500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> ---------------include指令--------------- include指令表示静态包含! include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。两个页面合并成一个文件,然后再编译成Servlet(Java文件) **动态包含是会为两个JSP页面都生成servlet,然后1.jsp的“真身”中会调用2.jsp的“真身”的_jspService()方法而已例如1.jsp<jsp:include page="2.jsp"> ---------------taglib指令--------------- JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri
13. Jsp动态标签
JSP动态标签是JSP自己的标签,不是由第三方提供的,所以使用JSP动态标签时无需使用taglib指令“导包”。 JSP动态标签的格式为:<jsp:xxx …> 无论是自定义的JSP标签,还是JSP自己的动态标签,还有第三方的标签,最终都会对应一组方法的调用 include动态标签 include标签是动态包含,与include指令不同,include标签与RequestDispatcher.include()方法的功能是相同的 用法: <jsp:include page="1/jsp"/> forward动态标签 forward标签的作用是请求转发!forward标签的作用与RequestDispatcher.forward()方法相同 用法<jsp:forward page="1.jsp"/> useBean、setProperty、getProperty动态标签 <jsp:userBean id="p1" class="com.itheima.domain.Person"/> <jsp:setProperty property="*" name="p1"/> <%=p1%>
EL
1. JSP2.0简介
JSP2.0要把html和css分离、要把html和javascript分离、要把Java代码块替换成标签。标签的好处是非Java人员都可以使用。 JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>
2. 什么是EL?
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出 EL表达式的格式:${…},例如:${1+2} 在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式 如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:\${1+2}
3. EL中隐藏对象
EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含、内置)对象。在EL中一共有11个隐藏对象,它们都与Map相似 ----------------操作操作对象的方式---------------- 1). 操作List和数组:${list[0]}、${arr[0]}; 2). 操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法; 3). 操作Map的值:${map.key}、${map[‘key’]},对应map.get(key) ----------------隐式对象---------------- 隐式对象名称 类型 pageContext javax.servlet.jsp.PageContext 和jsp隐式对象完全一样 pageScope java.util.Map 页面范围中的数据 requestScope java.util.Map sessionScope java.util.Map applicationScope java.util.Map header java.util.Map headerValues java.util.Map param java.util.Map paramValues java.util.Map intiParam java.util.Map cookie java.util.Map<String,Cookie> key:是cookie的name,value是cookie对象本身 ----------------隐式对象说明---------------- 1). param:param是Map<String,String>类型!param对象可以用来获取参数,与request.getParameter()方法相同 注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而 不是null。这一点与使用request.getParameter()方法是不同的 2). paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它 3). headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象 4). initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数 5). cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身 ----------------操作所有域(四个域)---------------- 可以使用pageContext对象操作所有域对象, 在getAttribute()、setAttribute()、removeAttribute()三个方法中 多添加一个参数,int scope来指定范围。在PageContext类中包含四个int类型的常量表示四个范围: REQUEST_SCOPE:request范围; SESSION_SCOPE:session范围; APPLICATION_SCOPE:application范围 示例: pageContext.setAttribute("user",user,pageContext.REQUESTSCOPE); ----------------获取其他隐藏对象---------------- 可以使用pageContext获取其他隐藏对象。 JspWriter getOut(): 获取out隐藏对象; ServletConfig getServletConfig(): 获取config隐藏对象; Object getPage(): 获取page隐藏对象; ServletRequest getRequest(): 获取request隐藏对象; ServletResponse getResponse(): 获取response隐藏对象; HttpSession getSession(): 获取session隐藏对象; ServletContext getServletContext(): 获取application隐藏对象; JspException getException(): 获取exception隐藏对象转换后的JspException对象 示例,如何调用: pageContext.request.contextPath
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。