• JSP(二)


    一、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

  • 相关阅读:
    [20180808]exists and not exists.txt
    [20180806]tune2fs调整保留块百分比.txt
    [20180730]exadata与行链接.txt
    [20180801]insert导致死锁.txt
    [20180718]拷贝数据文件从dg库.txt
    [20180713]关于hash join 测试中一个疑问.txt
    [20180705]关于hash join 2.txt
    virtualbox 中ubantu虚拟机范文win7文件夹
    myeclipse10安装findbugs
    win7共享文件夹给局域网
  • 原文地址:https://www.cnblogs.com/SkyGood/p/3996269.html
Copyright © 2020-2023  润新知