行意天下>正文 【HM】第10课:JSP+EL表达式+JavaBean-阿里云开发者社区

开发者社区> 开发与运维> 正文

行意天下>正文 【HM】第10课:JSP+EL表达式+JavaBean

简介:


<pre>

 

day10

 

上节内容回顾

         1jsp的入门

                   *jsp里面如何嵌入java代码

                   **有三种 <%!  %>  <%= %> <%  %>

 

                   *jsp就是servlet,最终也会被编译成servlet,放到tomcatwork目录里面

 

         2el入门

                   *获取域对象里面的值

                   *${域对象的名称}

 

         3cookie

                   *cookie分类

                   **有两种:会话级别的cookie和持久性的cookie(使用方法setMaxAge方法)

 

                   *创建cookienew Cookie("","")

                   *cookie回写到浏览器里面 response.addCookie(cookie);

 

                   *销毁持久性的cookie

                   第一:创建一个和要删除cookie相同名称的cookie,值""

                   第二:设置有效时长是0

                   第三:设置有效路径

                   第四:把cookie回写到浏览器内存

 

         4session

                   *session是服务器端技术,依赖于cookie

 

                   *session的创建、销毁

                   **创建:执行request.getSession()

                   **销毁有三种

                   *tomcat里面进行配置、先编码再解码

                   **第三种:调用方法

 

                   *禁用cookie之后,使用session

                   **在地址后面加一个;jsessionid=id

 

 思维导图

wKioL1WalG6TcwPhAADsH_VFplU941.jpg

1jsp

         1java  server pagesjava服务器端的页面,jsp运行在服务器(tomcat里面)

         *之前学过servletsun公司开发用于动态网站的技术,还有一个jsp

         **先有的servlet,因为servlet如果向页面输出内容太麻烦了,所以sun公司开发jsp可以方便向页面进行输出

 

         2jsp就是servletjsp最终也会被编译成servlet,会放到tomcatwork目录里面

         *jsp在什么时候编译成servlet:请求jsp时候编译成servlet

 

         3jsp组成:html+java代码+jsp自身

         4)在jsp里面要嵌入java代码有三种方式

         第一种:<%!  %>,如果定义变量是成员变量

         第二种:<%=  %>,向页面输出,生成servletservice方法里面out.print("hello" );

         第三种:<%  %>,写java代码,生成的servlet也在service方法里面

 

         4jsp的注释

         *jsp组成:html+java代码+jsp自身

         **html的注释

         **java的注释

         **jsp自身的注释  <%-- jsp自身的注释 --%>

 

         jsp的源代码阶段:这三类注释都存在

         * jsp编译成servlet之后:html注释和java注释存在,JSP注释会消失。

         * jsp最终向页面输出之后:只是html注释存在

        

         *jsp里面如果嵌入java代码,不能使用html的注释,而要是jsp自身的注释

          <%--

              <%

                   for(inti=0;i<2;i++) {}

               %>

          --%>

 

 

         5jsp的有三个指令

         *jsp指令的语法:首先jsp里面的指令要写在jsp页面最上面(不包括include指令)

                  <%@ 指令的名称  属性的名称="属性的值"%>

         属性名称写的时候严格区分大小写。

         第一个:page指令,设置jsp页面的一些信息

         <%@page 属性名称="属性的值"%>

         *page指令里面的属性

         **language属性:表示jsp支持的语言的类型,目前只支持java

         **extends属性:表示jsp编译成servlet,继承的类,一般不需要修改,默认继承的类HttpJspBase

                   ***原则:可以改变这个继承的类,但是这个类必须要是一个servlet

        

         **session属性:表示在jsp里面是否可以直接使用session对象,属性的值是truefalse

                   ***在默认的情况下,session属性的值是true

         =代码

            <%

               //request.getSession().setAttribute("aa","itheima");

               session.setAttribute("aa","itcast");

             %>

             <%=session.getAttribute("aa")%>

        

         **import属性:表示在jsp导入依赖的包

         =代码(可以分别写,也可以写在一起)

         java不同,jsp快速导包不是ctrl+shift+o,而是将光标放在类名的后面,alt+/

         <%@page import="java.util.Date"%>

         <%@page import="java.util.List,java.util.ArrayList"%>

 

         **bufferjsp输出的缓冲区的大小,默认的值 8kb

         **autoFlushjsp输出如果超出了缓冲区的大小,是否会正常输出

 

 

         **errorPage属性:如果jsp运行的时候出现了异常,设置异常跳转到错误页面(虽然

                                               页面的内容发生了变化,但是地址栏没有发生变化,说明跳转采用的

                                               转发机制

         **isErrorPage属性:在错误页面里面,是否显示错误信息,默认false.

                   ***一般用在程序员调试程序时候,但是如果系统要给客户,isErrorPage一定要设置成false

                   =当在错误页面里面把属性的值设置成true之后,才能在errorPage页面来使用

                   exception这个内置对象。

                   ==编译的servlet里面生成了代码

                       java.lang.Throwable exception =org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

                       if (exception != null) {

                        response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

                       }

        

         * contentType:设置打开jsp时候浏览器的编码

         * pageEncodingjsp编译成servlet,编译成servlet时候采用的编码

                    pageEncoding="utf-8",默认的编码是iso8859-1

        

         *isELIgnoredjsp里面是否忽略el表示(jsp是否可以使用el表达式),默认值false,表示不忽略(可以使用)

                   **如果想要在jsp里面使用el表达式,需要把这个属性值设置成false。如果设置成true,会把el表达式当做普通文本输出

 

         **重点掌握的属性: session import  errorPage  pageEncoding

 

 

         第二个:include指令,用于包含页面的指令(静态包含)

                   *支持多层嵌套,这样除了最外层的JSP,其它的JSP页面都可以不用写html代码,

                            直接写内容即可。

                   *在一个jsp里面包含其他的jsp里面内容

                   *语法: <%@ include 属性="属性值"%>

                   =  <%@ include file="head.jsp"%>

                  

                   *注意一:当包含某个jsp页面时候,在包含的的页面里面不需要写html的代码了,只需要写包含的内容

                   *注意二:include指令的file属性里面不能写参数,即加上?id=1等等内容。

                   *注意三:在includefile属性里面不能写变量

                   *注意四:在includefile属性里面路径不能加项目名。   

                  

                   *jsp最终要编译成servlet,有多个jsp页面,最终会编译成几个servlet

                            *使用include指令包含多个页面,最终会编译成一个servlet

                            *静态包含相当于代码复制把多个jsp里面的内容复制到一个jsp里面,生成一个servlet

 

 

         第三个:taglib指令

                   *作用:经常和jstl标签库一起使用,替代页面中的<% %>

                   *语法:<%@ taglib uri="jstl标签库的路径"prefix="标签库的别名"%>

 

         *掌握程度:

         第一:知道jsp里面有三个指令以及这三个指令的名称

         第二:三个指令分别可以做什么以及如何做

 

         问题:jsp里面有哪些指令?

         答:jsp里面有三个指令,这三个指令分别是 pageincludetaglib

             page指令可以设置页面的信息,里面重要的属性是sessionimporterrorPagepageEncoding

             include表示包含其他的jsp页面

             taglib可以和jstl使用替代页面中<%%>

 

 

         6jsp的内置对象

                   *什么是内置对象:在jsp里面可以直接使用的对象称为内置对象

                   *jsp里面有九个内置对象

                   request就是servlet里面HttpServletRequest对象,代表请求,域对象,获取提交的数据,获取客户机信息

                   response:就是servlet里面HttpServletResponse对象,代表响应,回写cookie,向页面输出

                   sesssion:就是servlet里面HttpSession对象,域对象

                   config就是servlet里面ServletConfig对象,获取servlet名称,获取初始化参数

                   application:是servlet里面的ServletContext对象,域对象,获取全局初始化参数,读取web项目中文件

 

                   exception代表异常对象

                            *如果想要使用,必须要把属性isErrorPage设置成ture才可以使用

                             java.lang.Throwable exception =org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

                                if (exception != null) {

                                 response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

                                }

 

                   page代表jsp编译成servlet,当前运行的servlet这个对象

                   out向页面输出的对象

                            * outresponse.getWriter()区别

                            **out使用的是JspWriterresponse.getWriter()使用的是 PrintWriter

                           

                            *outresponse.getWriter()输出机制

                            **产生两个缓冲区outresponse

                            ***out不能直接向页面输出,把out里面的值放到response缓冲区里面,通过response向页面输出

 

                   pageContext****

                            第一:本身就是一个域对象

                                     **pageContext只是在jsp里面可以使用,当前页面。

                                     **设置值 setAttribute(String name, Object value)

                                     **取值 getAttribute(String name)

                                     =代码

                                         <%

                                               pageContext.setAttribute("msg","itcast100");

                                          %>

                                         <%=pageContext.getAttribute("msg") %>

 

                            第二:pageContext可以向域对象里面设置值

                                     *servletContext(在jsp里面application)、sessionrequest

                                    

                                     1)设置值的方法:setAttribute(String name, Object value, int scope)

                                               第三个参数:表示是哪个域

                                               *使用pageContext的常量表示不同的域

                                               *如果是application,使用APPLICATION_SCOPE

                                               *如果是session,使用SESSION_SCOPE

                                               *如果是request,使用REQUEST_SCOPE

                                               *如果是pageContext,使用PAGE_SCOPE

 

                                     2取值的方法:getAttribute(String name,int scope)

                                               第二个参数:表示是哪个域

                                               *使用pageContext的常量表示不同的域

                                               *如果是application,使用APPLICATION_SCOPE

                                               *如果是session,使用SESSION_SCOPE

                                               *如果是request,使用REQUEST_SCOPE

                                               *如果是pageContext,使用PAGE_SCOPE

                                     =代码

                                          <%

                                               pageContext.setAttribute("app","appvalue", pageContext.APPLICATION_SCOPE);

                                               pageContext.setAttribute("sess","sessvalue",pageContext.SESSION_SCOPE);

                                               pageContext.setAttribute("req","reqvalue", pageContext.REQUEST_SCOPE);

                                               pageContext.setAttribute("page1","page1value", pageContext.PAGE_SCOPE);

                                           %>

                                           <%=pageContext.getAttribute("app",pageContext.APPLICATION_SCOPE) %>

                                          <%=pageContext.getAttribute("sess",pageContext.SESSION_SCOPE) %>

                                          <%=pageContext.getAttribute("req",pageContext.REQUEST_SCOPE) %>

                                           <%=pageContext.getAttribute("page1",pageContext.PAGE_SCOPE) %>

                                    

                                     3findAttribute(String name) 方法(注意这个方法是pageContext对象

                                               所特有的方法)

                                     *表示从域对象里面获取值,如果多个域对象里面的值相同的,得到域范

                                     围小的里面的值《** 如果只设置 application域的属性值,在360

                                     览器中获取不到值!!****

 

                                     *四个域对象!!!!!!!!!!!!!!!!!!!!!!!!!

                                     **pageContext:范围当前的页面有效(这个域对象只是在jsp里面使用)

                                     **request:范围一次请求

                                     **session:范围是一次会话

                                     **application:范围是整个web项目

                                                                                                                                                    

                            第三:pageContext可以获取其他八个内置对象

                            *只需要得到pageContext,就可以得到jsp里面的其他的八个内置对象

                            *  <%

                                     pageContext.getRequest();

                                     pageContext.getResponse();

                                     pageContext.getSession();

                                     //....

                              %>

 

                            *掌握程度:九个内置对象是什么,九个内置对象分别可以做什么

 

 

         ==========================================================================================

         上午内容的总结

         1jsp的三个指令

                   *page includetaglib

        

         2jsp的九个内置对象

                   request

                   response

                   session

                   config

                   application

                   exception

                   page

 

                   out

                            *outresponse输出机制

                   pageContext

                            *第一:域对象,这个域对象只能在jsp里面使用

                            *第二:向其他域对象里面设置值

                            *第三:获取其他的八个内置对象

 

 

         7jsp的动作标签

         (代码位置:/day10/WebRoot/jsp

                   *语法: <jsp:标签名称属性="属性值"></jsp:标签名称>

                   *jsp里面可以实现的一些功能

                   *jsp里面有六个动作标签

                   第一类:与javabean没有关系的动作标签(有三个)

                   **<jsp:forward></<jsp:forward>:实现在jsp里面转发的操作(注意路径不能有项目          )

                            ***<jsp:forward   page="/jsp/hello.jsp" ></jsp:forward>

                            ***类似于servlet里面执行request.getRequestDispatcher(...).forward(....);

 

                   ** <jsp:include></jsp:include>: 表示包含页面(动态包含)

                            ***有多个jsp,多个jsp会编译成几个servlet

                            ***有多个jsp会编译成多个servlet

                            =代码 <jsp:include page="head.jsp"></jsp:include>

                            **已经有一个include标签的jsp页面,不能再被其它的jsp页面的jsp:forward

                            jsp:include页面使用。

                           

                   ** <jsp:param></jsp:param>: 传递参数

                            ***一般用在有路径的动作标签里面

                            ***类似于get提交

                            ****http://127.0.0.1/day10/login?id=1

                            =代码

                               <!-- 使用动作标签实现转发 -->

                                <!-- 类似于进行转发的操作,在地址后面添加参数hello.jsp?id11=zhangsan -->

                                <jsp:forwardpage="/jsp/hello.jsp">

                                     <jsp:paramvalue="zhangsan" name="id11"></jsp:param>

                                </jsp:forward>

                            ****标签中有中文提交的数据乱码。

                   第二类:与javabean有关系的动作标签(有三个)

                   **<jsp:useBean>: 表示设置要操作哪一个javabean

                   **<jsp:setProperty>: javabean里面设置值

                   **<jsp:getProperty>: javabean里面获取值

 

 

2javabean******

         1)什么是javabean:就是一个java类,这个java类要遵循一定的书写规范

         *书写规范

         第一个规范:javabean里面需要有一个公开的没有参数的构造方法

         第二个规范:javabean里面的属性私有的

         第三个规范:javabean里面的属性


      本文转自屠夫章哥  51CTO博客,原文链接:http://blog.51cto.com/4259297/1671474,如需转载请自行联系原作者






版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章