首页 > 代码库 > JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)

JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)

1、什么JSP    * servlet:java编写的处理动态web的技术        * 特点:Java代码中嵌套html代码    * jsp        * 特点:HTMl代码中嵌套java代码    * %tomcat%/conf/web.xml  --> <servlet-mapping><servlet-name>*.jsp    * 目的:将页面数据处理与页面显示相分离    2、JSP是如何工作的    * 继承关系        * public final class demo_jsp extends org.apache.jasper.runtime.HttpJspBase        * public abstract class HttpJspBase extends HttpServlet implements HttpJspPage        * 总结:demo_jsp  --> HttpJspBase  --> HttpServlet    * tomcat调用servlet引擎处理JSP页面        * 位置: %tomcat%/conf/web.xml  --> serlvet(*.jsp) -->  org.apache.jasper.servlet.JspServlet        * 在web context root 读取指定的文件                */demo.jsp        * 将读取的文件分析,生成相应的servlet文件,java源文件            * demo_jsp.java            * 目录:%tomcat%\work\引擎\主机\项目名\org\apache\jsp        * 将生成的Java文件,编译成字节码文件            * demo_jsp.class    * 通知servlet引擎处理当前生成好的servlet    3、JSP语言    * JSP指令:配置页面的信息,提供给JSP引擎生产java源文件        * 格式:<%@ 指令 [attribute="value"]%>        * 位置:建议放置带页面的头部        * page指令            * 格式:<%@ page ...%>            * 属性配置:                * pageEncoding:配置当前页面保存信息的编码                * contentType:配置当前页面生成的servlet文件响应浏览器的编码                    * response.setContentType("text/html;charset=UTF-8");                    * 比较:                        * 仅有pageEncoding                            * 配置当前页面的编码                            * 配置生成servlet文件响应浏览器的编码                        * 仅有contentType                            * 配置当前页面的编码                            * 配置生成servlet文件响应浏览器的编码                        * 两个都有                            * pageEncoding仅设置当前页面的编码                            * contentType仅设置servlet文件响应浏览器的编码                * import:引入当前JSP页面需要使用的Java类或接口的包路径                    * 可以重复引用                    * 多个之间可以使用逗号分隔                    * 导包最后一条可以输入多个分号                * language:确定当前jsp页面使用的语言                    * 默认:java                * info:提供对JSP的描述<%@ page info="This JSP Page Written By ZARA"  %>                * session:确定当前页面是否可以使用session                    * 默认:ture                * extends,确定当前jsp页面在生成servlet文件时,继承的父类                    * 扩展                    * 例如:page extends="java.lang.String"                                    * isErrorPage:是否是错误页面                    * 默认值:false                    * 当设置成true,在当前页面将可以使用一个变量 exception                * errorPage:确定错误页面                    * 当页面出现异常时,跳转的页面                    * / 指 context root                * isThreadSafe:是否是线程安全                    * 默认值:true                    * 如果设置成false,在生成的java源码中添加implements SingleThreadModel不推荐使用了                * isELIgnored:是否忽略EL表达式                    * 默认值:false                    * 如果设置true,将忽略EL表达式                                    * buffer:当前servlet文件的缓存区大小,和autoFlush一起使用                    * 默认值是8kb                * autoFlush:是否自动刷新,当buffer缓存区被填写满后,会自动的刷新内容到浏览器            * include指令            * 静态包含:引入其他页面,将其他页面与当前页面合并成一个页面后,再显示给浏览器            <%@ include file=/1.jsp” %>        * taglib指令            * 用于在JSP页面中导入标签库,常用标签库JSTL    * JSP脚本元素        * 声明标签            * 格式:<%! Java方法或字段 %>            * 此标签中的内容,在JSP引擎生产servlet文件时,将直接拷贝。放置在当前类        * 表达式标签            * 格式:<%= java表达式 %>                * 例如:String str = "abc" + "def ";            * 等于与 out.print( 表达式 );            * 将表达式的结果输出到浏览器        * 代码块标签:            * 格式:<% java代码片段 %>                * 任何方法里面的内容            * 将标签内容完全拷贝,放置到service方法体中,和输出html内容的方法在一起        * 总结:            * 脚本元素不能嵌套使用            * 不能在html注释中使用            * JSP注释        * 格式:<%-- 注释内容 --%>        * HTML注释:<!-- 注释内容  -->        * Java注释:            * 行注释://注释内容            * 块注释:/*  注释内容  */            * 标准JavaDoc注释:/** 注释内容  */        * JSP注释,仅在源码级别有效    * JSP的内置对象        * 个数:9        * 在JSP页面中隐藏的Java对象        * 1、Object page : 当前类的引用            * 作用范围:当前页面        * 2、HttpServletRequest request            * 作用范围:一次请求(可能涉及多个JSP或Servlet,转发)        * 3、HttpSession session            * 作用范围:一个会话        * 4、ServletContext application            * 作用范围:整个web相应        * 5、ServletConfig config            * 当前servlet的配置            * 可以单独配置,把JSP文件当成servlet使用                * 配置文件的位置:WebRoot/web.xml                * 内容                     <!-- 注册jsp -->                     <servlet>                        <servlet-name>jspfile</servlet-name>                        <jsp-file>/obj.jsp</jsp-file>                        <init-param>                            <param-name>user</param-name>                            <param-value>lt</param-value>                        </init-param>                     </servlet>                                          <!-- 映射 -->                     <servlet-mapping>                        <servlet-name>jspfile</servlet-name>                        <url-pattern>/jsp</url-pattern>                     </servlet-mapping>                * 注意:                    1、使用tomcat,servlet引擎                        http://localhost:8080/day08/obj.jsp                    2、自定义访问路径                        http://localhost:8080/day08/jsp        * 6、HttpServletResponse response            * 响应            * 注意:使用的Writer,所以getOutputStream会出现异常                * 7、Throwable exception            * 错误页面中获得异常信息        * 8、JspWriter out            * public class JspWriterImpl extends JspWriter {            * abstract public class JspWriter extends java.io.Writer {                        * public class PrintWriter extends Writer {                    * 9、PageContext pageContext            * 当前JSP页面的上下文对象,管理当前JSP页面的            * 具有其他隐式对象的引用            * 设置属性的值                * 在不同的作用域设置属性值                    pageContext.setAttribute("user","liang_page",PageContext.PAGE_SCOPE);                    pageContext.setAttribute("user","liang_request",PageContext.REQUEST_SCOPE);                    pageContext.setAttribute("user","liang_session",PageContext.SESSION_SCOPE);                    pageContext.setAttribute("user","liang_application",PageContext.APPLICATION_SCOPE);                * 从不同的作用域获得属性值                    <%=pageContext.getAttribute("user",PageContext.PAGE_SCOPE) %><br/>                    <%=pageContext.getAttribute("user",PageContext.REQUEST_SCOPE) %><br/>                    <%=pageContext.getAttribute("user",PageContext.SESSION_SCOPE) %><br/>                    <%=pageContext.getAttribute("user",PageContext.APPLICATION_SCOPE) %><br/>                * 从不同的作用域,依次查询需要的属性值                    * <%=pageContext.findAttribute("user") %>                    * page、request、session、application                    4、EL表达式,全名为Expression Language    * 功能:获取数据,EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)    * 格式:${表达式}    * EL执行        <%@ page isELIgnored="true" %>忽略表达式将会以字符串的形式输出            * out.write("${user}\r\n");        <%@ page isELIgnored="false" %>不忽略,通过proprietaryEvaluate去解析表达式             out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${user}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));    * 注意:        * EL表达式,依次从4个作用域中获取不同的属性值            * page  -- request -- session -- application        * EL表达式,如果属性名不存在,返回空字符串            * EL常用对象        pageContext    对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)        pageScope    代表page域中用于保存属性的Map对象        requestScope    代表request域中用于保存属性的Map对象        sessionScope    代表session域中用于保存属性的Map对象        applicationScope    代表application域中用于保存属性的Map对象        <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>        <%@ page import="cn.itcast.servlet.Book"%>        <%@ page import="java.util.Map"%>        <%@ page import="java.util.HashMap"%>        <%@ page import="java.util.Set"%>        <%@page import="java.util.Iterator"%>        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">        <html>        <head>        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">        <title>Insert title here</title>        </head>        <body>                <%            pageContext.setAttribute("user","liang_page",PageContext.PAGE_SCOPE);            pageContext.setAttribute("user","liang_request",PageContext.REQUEST_SCOPE);            pageContext.setAttribute("user","liang_session",PageContext.SESSION_SCOPE);            pageContext.setAttribute("user","liang_application",PageContext.APPLICATION_SCOPE);                    //request.setAttribute("user","liang_request");        %>        java <br/>使用java的方式获取user        <%=pageContext.getAttribute("user",PageContext.REQUEST_SCOPE) %><br/>        <!-- 在JSP页面中不再使用Java脚本 -->        el -- <br/>        ${user}  -- pageContext.findAttribute("user"); <br/>        如果user存储在不同的作用域,则使用以下方式获取        page: ${pageScope.user}<br/>        request:${requestScope.user}<br/>        session:${sessionScope.user}<br/>        application:${applicationScope.user}<br/>                <hr/>                <%                    Book book = new Book("b007","Java Core","78");            pageContext.setAttribute("bookObj",book);                %>        <!-- 获得JavaBean中的,属性的值 -->        ${pageScope.bookObj.id}<br/>        ${pageScope.bookObj.title}<br/>        ${pageScope.bookObj.price}<br/>                <hr/>                <%            Map<String,Book> map = new HashMap<String,Book>();            map.put("b001",    new Book("b004","Thinking Java","78") );                        //迭代器            Set<Map.Entry<String,Book>> set = map.entrySet();            Iterator<Map.Entry<String,Book>> it = set.iterator();            while(it.hasNext()){                Map.Entry<String,Book> entry = it.next();                //entry.getKey()                //entry.getValue()                pageContext.setAttribute("entry",entry);            }                %>        ${entry.key} <br/>        ${entry.value.id}        <hr/>                <%=pageContext.getSession().isNew() %><br/>        ${pageContext.session.new}<br/>        <hr/>                <%=((HttpServletRequest)pageContext.getRequest()).getContextPath() %><br/>        ${pageContext.request.contextPath}                        </body>        </html>        

 

JavaWeb学习之什么JSP、JSP是如何工作的、JSP语言(各种指令和九大内置对象)、EL表达式简单使用(5)