一、pageContext对象
    1》代表当前JSP页面的运行环境, 【作用域仅仅局限于当前JSP页面中,出了该JSP页面, 原PageContext域对象被销毁】
    2》封装了对其它8大隐式对象的引用
    3》它自身是一个域对象
    4》封装了web开发中经常设计的一些常用操作:包含和跳转等。
    
    一】重点方法:
    1》转发:
        forward("资源path");
    2》包含:
        include("资源path");
    2》设置值
        方法一:    setAttribute("属性","属性值",要放入的域对象);
            域对象:【从小到大的域对象】
                PageContext.PAGE_SCOPE;//默认
                PageContext.REQUEST_SCOPE;
                PageContext.SESSION_SCOPE;
                PageContext.APPLICATION_SCOPE;
        
        方法二: setAttribute("属性","属性值");//【默认为存入PAGE域,即当前页面】
    
    3》取值
        方法一:    【对应域】.getAttribute("属性");        
            eg:
                request.getAttribute("name");
        方法二:  pageContext.getAttribute("属性值",域对象);
            eg:
                <%=pageContext.getAttribute("name",PageContext.SEESION_SCOPE)%>
    4》删除值
        方法一:
            void removeAttribute("属性");        
        方法二 :
            void removeAttribute("属性",int scope);    
    
    5》findAttribute方法【特别重要,先后查找各个域中的属性值】
            以属性为key,依次去四个域对象中查询对应的值,找到为止,找不到返回null。
        方法原型:
            Object findAttribute("属性");
        查找顺序:由小到大
                    PAGE_SCOPE --> REQUEST_SCOPE --> SESSION_SCOPE --> APPLICATION
    
    二】细节:
        1》pageContext域对象仅限于当前jsp页面中,除了该jsp页面,原pageContext域对象销毁,如果取不到值,返回null。
        2》pageContext域对象可以将对应的值保存在指定的四个域对象之一。
                eg:
                    pageContext.setAttribute("name","jack",PageContext.APPLICATION_SCOPE);
                    or
                    request.setAttribute("name","jack");
                取属性值的时候:
                    pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);
                    or
                    <%=request.getAttribute("name")%>
    
    
二、内置标签【非javabean标签】
                ---美化+业务逻辑
                
        作用:为了取代<%%>脚本形式,使用JSP标签/JSP动作,美化JSP页面,使其都是由标签组成,不再有其它的内容
        
        
    一】<jsp:include page="path" flush="ture | flush" />  
            
            注意:
                1》是动态包含,会生成多个Servlet对象,N个jsp文件生成N个Servlet
                2》翻译后的结构良好
                3》【重点】是动态包含,相当于函数调用,是在运行时包含。
                4》flush:指定在插入其它资源的输出内容时,是否先将当前JSP页面的
                                    输出内容刷新到客户端,再加入包含的页面。默认为false.
                                    如果为false则按照页面的顺序,无优先级之说。
            比较:
                动态引入(执行时引入): <jsp: include page="path"/>
                静态引入(翻译时引入): <%@ include file="path" %>
            
    
    二】<jsp:forward page="path" />    
                    -----用于把请求转发给另一个资源。
            即:转发到page所指向的JSP页面。
    三】<jsp:param name="" value="" />
            eg:
                <jsp:param name="name" value="jack" />
                
        注意:<jsp:param>需要结合<jsp:include>和<jsp:forward>使用, 主要作用是提供参数
                <jsp:forward page="/to.jsp">
                    <jsp:param name="name" value="jack">
                    <jsp:param name="password" value="123">
                </jsp:forward>
    总结:
        【重点】
        POST传中文到服务器:
                开头设置:  request.setEncodingCharactor("UTF-8");
        GET传中文到服务器:
                1》基本标签:<a><form>中:
                        编码URLEncoder   解码 getBytes("ISO8859-1");-->new String(byte[], "UTF-8")
                2》JSP内置标签:
                        编码URLEncoder  解码  URLDecoder
        eg:
            客户端:编码中文
                <jsp:forward page="/to.jsp">    
                    <jsp:param name="username" value="<%=URLEncoder.encoder("杰克", "UTF-8")%>">
                    <jsp:param name="password" value="123">
                </jsp:forward>
                
                
            服务端(解码中文):
            
            基本标签————
                <%
                    String username = request.getParameter("username");
                    byte[] buf = username.getBytes("ISO8859-1");
                    username = new String(buf, "UTF-8");
                %>
            
            内置标签
                <%
                    String username = request.getParameter("username");
                    username = URLDecoder.decod(username, "UTF-8");
                %>
                        
三、映射JSP

1》通过修改web.xml文件,可以将其伪装成html页面。
            code:
            <servlet>
                <servlet-name>qq</servlet-name>
                <jsp-file>/index.jsp</jsp-file>
            </servlet>
            <servlet-mapping>
                <servlet-name>qq</servlet-name>
                <url-pattern>/qq.html</url-pattern>
            </servlet-mapping>
            
            
    2》在<servlet></servlet>中添加<init-param>标签,再通过JSP内置对象config获取初始化参数
    
        code:
            <servlet>
                <servlet-name>qq</servlet-name>
                <jsp-file>/index.jsp</jsp-file>
                <init-param>
                    <param-name>emial</param-name>
                    <param-value>jack12@163.com</param-value>
                </init-param>
            </servlet>
            <servlet-mapping>
                <servlet-name>qq</servlet-name>
                <url-pattern>/qq.html</url-pattern>
            </servlet-mapping>
            =====================
            <%= config.getInitParameter("email")%>

四、JSP常见错误
    一】语法错误
        <%= 表达式%> //注意:表达式后面不要加;
    二】语法无错,但翻译成Servlet后出错。
            如:自己定义了一个和内置对象同类型同名称的变量。
    三】逻辑出错
    
    
五、javaBean标签
    一】<jsp:useBean>标签:用于在JSP页面中查找或创建一个对应的JavaBean对象
            <jsp:useBean id="stu" class="cn.itcast.web.jsp.Student" scope="page | request | session | application">
            
            实质:
                1》会调用javaBean对象的构造方法,构造一个Bean对象
                2》将创建好的Bean对象存入域对象中
                3》但是,如果在域对象中有对应的JavaBean对象存在,那么该标签就只会查找该JavaBean对象而不会创建和绑定。
            
            id代表两个意思:
                    1》绑定到域对象的名称。
                    2》Student类对象的引用。
            注意:
                1》在标签中,pageContext和page等价:
                    1>在JSP的脚本文件中,要使用pageContext;
                    2>而在JSP标签中则使用page.
                
    二】<jsp:setProperty>标签:设置一个JavaBean对象的属性
            
            实质:
                    会翻译成调用setXxx()方法,去设置响应的值

格式:
            【三种方式:】
                <jsp:setProperty name="beanName"
                        
                                property="propertyName" value="属性值" //直接设置值
                                or
                                property="propertyName" param="paramerName" //根据参数赋值
                                or
                                property="*"  //只有当bean属性和传进的参数完全一样的时候,会自动反射给JavaBean
                        
                />    
    三】<jsp:getProperty>标签:获取一个JavaBean对象的属性值。
            实质:调用bean对象的getXxxx()方法
            格式:
                <jsp:getProperty name="beanName" property="字段名">
                
                
    code:
        <%-- 创建/查找Bean对象 --%>
    <jsp:useBean id="stu" class="cn.itcast.web.jsp.Student" scope="session" />
    <%--设置值【通过value】
      <jsp:setProperty name="stu" property="name" value="tian" />
      <jsp:setProperty name="stu" property="age" value="23" />
      <jsp:setProperty name="stu" property="salary" value="10000" />
       --%>
      
       <%--设置值【通过param】 --%>
       <jsp:setProperty name="stu" property="name" param="n" />
       <jsp:setProperty name="stu" property="age" param="a" />
       <jsp:setProperty name="stu" property="salary" param="s" />
    <%--获取值 --%>
    name:
    <jsp:getProperty name="stu" property="name" />
    <br /> age:
    <jsp:getProperty name="stu" property="age" />
    <br /> salary:
    <jsp:getProperty name="stu" property="salary" />
    <br />
    
六、JSP的开发模式
    一】开发模式一:
        JSP(V)+JSP(C)+JavaBean(M):适合逻辑简单的
    二】开发模式二:
        JSP(V)+Servlet(C)+JavaBean(M):适合逻辑复杂的。
        
        
        
补充:
    通过BigDecimal的  BigDecimal setSacle(int newScale, int roundingMode)方法可以设置小数点的精确度。
        newScale:保留的精确度
        roundingMode:进行精确度处理的方式(四舍五入等......)
    code:
        BigDecimal bd = new BigDecimal(this.result).setScale(2, BigDecimal.ROUND_HALF_UP);小数点后保留两位
        double result = bd.doubleValue();

七、EL表达式和JSTL标签快速入门
    一】EL="Expression Language"
        注意:<%@page isELIgnored="false/true">  //只有值为false时候浏览器才会解析EL表达式,否则原样输出
    作用:
        1》快速解析域对象并输出JavaBean的值,或者普通变量的值
            code:
                  <%
                      Address address = new Address();
                      address.setLocation("雅安—天全");
                      address.setZipcode("625501");
                      Student s = new Student();
                      s.setAddress(address);
                      s.setName("jack");
                      s.setAge(21);
                      s.setSalary(7500);
                      session.setAttribute("Stu", s);
                   %>
                  
                   <%-- EL表达式 --%>
                   用户名:${Stu.name} <br />
                   年龄:${Stu.age} <br />
                   薪资:${Stu.salary} <br />
                   地址:${Stu.address.location} <br />
                   邮编: ${Stu.address.zipcode} <br />
        2》用于进行简单的逻辑判断    
               10>5    吗? ${10>5}<br />
               10=5  吗? ${10 == 5}<br />
               10<5    吗? ${10 < 5} <br />
        
    二】JSTL=Java Standard Taglib Language
    作用:快速输出动态内容,以替换JSP页面中的脚本<%%>代码
    code:
                    <%
                      ArrayList<String> al = new ArrayList<String>();
                      al.add("java");
                      al.add("XML");
                      al.add("servlet");
                      al.add("JSP");
                      request.setAttribute("AL",al);
                   %>
                  
                   <table border="1px" align="center">
                       <tr>
                           <th>书名</th>
                           <th>操作</th>
                       </tr>
                       <c:forEach var="S" items="${AL}">
                           <tr>
                               <td>${S}</td>
                               <td>购买</td>
                           </tr>
                       </c:forEach>
                   </table>
        code:用于遍历map集合
            <%
                Map<Integer, String> map = new linkedHashMap<Integer, String>();
                map.put(1, "java");
                map.put(2, "xml");
                map.put(3, "servlet");
                map.put(4, "jsp");
                pageContext.setAttribute("MAP", map);
            %>
            
            <c:forEach var="entry" items="${MAP}">
                ${entry.key}
                ${entry.value}
            </c:>
    
    
    补充:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">
    
    
    
    注意事项:
        1》需要将对象绑定到域对象中,并保证该域对象没有销毁,因为EL只会从域对象中检索对应的值
        2》JSTL和EL经常会绑定到一起用。
        
        
补充:
    HTML两个重要事件:
        获取焦点事件:onfocus
        失去焦点事件:onblur

JSP(二)的更多相关文章

  1. 浅谈JSP(二)

    一.EL表达式 作用:从作用域(pageContext,request,session,application)中取值,并显示在页面中. 本质:用于替换输出脚本(<%= %>). 1.从作 ...

  2. jsp二(指令)

    一.jsp动作标签: 1)<jsp:forward> 请求转发 相当于之前的request.getRequestDispatcher(..).forward(..); <!--jsp ...

  3. 菜鸟日记之JSP二 内置对象的理解

    ·最近学习JSP了,对编程和网络又有了一些理解.无论是现实中人与人的交流,还是网络世界的接触,都是在相互表达自己的意思让别人知道,并理解对方的信息.然后我们知道的事情不断的变多,会又交杂出新的内容,不 ...

  4. jsp (二) 练习

    package cn.sasa.serv; import java.io.IOException; import java.sql.SQLException; import java.util.Lis ...

  5. JavaWeb学习之JSP(二) JSP标签

    JSP常用标签 什么是JSP标签 JSP标签,有的地方也叫做JSP动作,在JSP中编写大量的java代码会使JSP页面显得杂乱无章,看起来非常不舒服,因此JSP提供了一些类似html的标签,通过这些标 ...

  6. 一、 JSP概述 二、JSP的语法结构 三、JSP内置对象

    一.JSP概述###<1>概念 java服务器页面 可以编写动态页面 其内部是以HTML标签为主,可以在HTML标签嵌套java代码 jsp文件以.jsp为后缀 jsp本质上就是一个Ser ...

  7. 在jsp中常用的内置对象(5个)小总结和两种页面跳转方式(服务器端调转、客户端跳转)的区别

    jsp中常用的几个内置对象: 一.request对象 主要作用:  (1)获取请求页面的信息   比如:request.getParameter("参数名");  (2)获取客户端 ...

  8. 【转】JSP总结

    day1 JSP 定义:     1)Java Server Page, Java EE 组件,本质上是 Servlet.     2)运行在 Web Container.接收 Http Reques ...

  9. jsp中的forward和redirect的区别

    转自http://blog.163.com/tsing_hua/blog/static/139622224201101110836644/ 一.调用方式 我们知道,在servlet中调用转发.重定向的 ...

随机推荐

  1. 给你讲个笑话,我是创业公司CEO

      文/办公室奇葩说(Office 78)一个在办公室较为正经的八卦号. 前几天你看见朋友圈刷屏的文章<给你讲个笑话:我是做互联网的>. 你心想,写文章的那人是傻逼吗?觉得做互联网就是个笑 ...

  2. MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)

    记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下. 头文件中创建CToolTipCtrl变量,然后在初始化时激活使用 ...

  3. 获取SQL段的执行时间

    对SQL进行优化 经常会需要知道这条SQL语句执行的时间,这里介绍我的一种常用做法 DECLARE @d DATETIME SET @d=GETDATE() --do something --for ...

  4. MVC4.0中ViewBag、ViewData、TempData和ViewModel几种传值方式的区别

    MVC框架实现了数据的分离,使页面看起来更加的简洁,MVC4.0中Controller和View的数据传输有上边这几种方式,今天我们来探讨下这几种方式的却别. 一:ViewBag和ViewData V ...

  5. 笔记:java并发编程实践1

    Java 5.0 adds ConcurrentHashMap, a replacement for synchronized hash-based Map implementations, and ...

  6. 【李婶小教程】(SE_lab3)

    额,今天说一下这个SE_lab3那几个东西都是怎么装的. 啊--其实技术含量貌似不是很高的. 1.先说最简单的一个叫做:Findbugs 点这个Eclipse Marketplace,这是一个神奇的东 ...

  7. Spring-mvc junit单元测试中 如何回滚?

    @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration(value = "src/main/webapp") @C ...

  8. java中paint repaint update 之间的关系

    最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...

  9. bootstrap完整导航栏

    效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. RequireJS 2.0 新特性

    就在前天晚上RequireJS发布了一个大版本,直接从version1.0.8升级到了2.0.随后的几小时James Burke又迅速的将版本调整为2.0.1,当然其配套的打包压缩工具r.js也同时升 ...