zoukankan      html  css  js  c++  java
  • javaWeb--jsp & jQuery

    jsp页面的基本构成:
    指令标签
    HTML标记语言
    注释   <!-- html注释 -->  <%-- java代码注释 -->   //html注释对jsp嵌入的代码不起作用,因此可以组合它们构成动态的html注释
    jsp动作标签 <jsp: >


    1. 指令标签
    指令标签不会产生任何内容输出到网页中,主要用于定义jsp页面相关信息
    如使用的语言、导入的类包、指定错误处理页面

    1.1 page指令
    重要属性:
    import属性,设置jsp导入的类包。因为jsp可以嵌入java代码,而这些代码在调用API时需要导入相应的类包
    例如: <%@ page import="java.util.*"%>
    pageEncoding属性,定义jsp页面编码格式
    例如:<%@ page pageEncoding="GB18030"%>
    contentType属性,设置jsp页面的MIME类型和字符编码,浏览器会据此显示网页类容
    例如:<%@ page contentType="text/html;charset=UTF-8"%>
    session属性,指定jsp页面是否使用HTTP的session会话对象
    例如:<%@ page session="false"%>
    isErrorPage属性,将当前jsp页面设置成错误处理页面来处理另一个jsp页面的错误
    例如:<%@ page isErrorPage="true"%>
    errorPage属性,指定处理当前jsp页面异常错误的另一个jsp页面,属性值是一个url字符串
    例如:<%@ page errorPage="error/loginErrorPage.jsp"%>

    1.2 inlcude指令
    用于在jsp页面中包含另外一个文件的内容,只支持静态包含,内容将原样包含在jsp页面中,被包含文件中
    代码不会执行,可以是一段java代码、html代码或者另外一个jsp,其值是当前jsp页面文件的相对url路径

    1.3 taglib指令
    用于加载用户自定义标签
    prefix属性用来加载自定义标签的前缀
    uri属性用于指定自定义标签的描述文件符位置
    例如:<%@taglib prefix="view" uri="/tags/view.tld"%>

    2. 嵌入java代码

    jsp脚本段
    语法格式如下:
    <%   编写java代码   %>

    jsp声明
    定义全局变量与全局方法,可以在整个jsp页面使用
    格式如下:
    <%!  变量或者函数   %>

    jsp表达式
    jsp表达式可以把可以把java表达式的结果输出到jsp页面中,表达式的最终运算结果被转换为字符串类型
    格式如下:
    <%= 表达式 %>


    3. jsp动作标签
    <jsp:include>
    该动作标签可以将另外一个文件包含到当前的jsp页面中,可以使静态文本也可以是动态代码
    page属性用来指定被包含文件的相对路径
    flush属性用来指定是否刷新缓冲区
    注意,被包含的jsp文件中不要使用<html>和<body>标签,源文件和被包含文件中变量名和方法不要冲突
    例如:
    <jsp:include page="validate.jsp" flush="false"/>

    <jsp:forward>
    将当前页面的请求转发给其它web资源(html页面,jsp页面,Serverlet等)
    用于转向页面,该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面了

    <jsp:param>
    可作为其他标签的子标签,为其他标签传递参数
    例如:
    <jsp:forward page="addUser.jsp">
        <jsp:param name="userName" value="mi"/>
    </jsp:forward>


    4. 部署项目到tomcat
    在tomcat的server.xml中编写<Content>标签
    例如:
    <Context path="/test" docBase="F:CodeingMyEclipseProjects estWebRoot" reloadable="true"/>
    其中path为部署的逻辑路径,可与项目名称不同,docbase是物理路径
    例如:
    https://localhost:8080/test/index.jsp

    5.  jsp声明与脚本端变量的区别
    jsp声明格式 <%! int a = 3;%>
    脚本段形式:<% int b = 5 %>
    当服务器将jsp转换为servlet时,会将jsp的声明转换为类的成员变量,而脚本段转换为方法中的局部变量,
    servlet是单实例的,这样成员变量的值就只有一个,每个用户都会访问它,而脚本段中则是局部变量,每个
    用户访问时各有一份,互不影响。


    //jsp中的几个主要对象
    6. 关于requset方法
    request的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttritbute方法设置属性与
    属性值,然后通过getAttribute方法根据属性获取到对应对象值。setAttribute与getAttribute方法都是在
    服务器端内部执行,客户端不知道服务器是否执行过这两个方法
    而request的getParameter方法作用是通过表单或者url请求的参数发送过来的参数值,是客户端和服务器之
    间的交互,并没有对应的set方法
    request对象内数据的存活范围:客户端向服务器发送一个请求,服务器返回一个响应后该请求对象就被销毁,
    之后再向服务器发送新的请求时,服务器会创建新的request对象,该对象跟之前的对象没任何关系。

    session对象的生命周期:同一个浏览器中,无论发送多少请求,session对象只有一个。

    application存活范围:存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会和一直
    存在,整个服务器运行过程中,application对象只有一个。

    7. 重定向和请求转发
    RequestDispatcher的forward方法称为请求转发

    请求转发与重定向的区别:
    1)请求转发整个过程都处于同一个请求当中
    2)重定向实际上    客户端向服务器发送两个请求
    3)RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher方法得到的,是属于请求
    对象的方法。
    4)sendRedirect是HttpServletRsponce对象的方法,即响应对象的方法,既然调用了响应对象的方法,表明整
    个请求过程已经结束,服务器开始向客户端返回执行的结果。

    8. 一个标准的javaBean有以下几个特性:
    是一个公共类
    有一个不带参数的构造方法
    通过set和get方法设置属性

    典型的javaBean类
    public class Person {
        private String name = "zhumingjie";

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }


    10. jsp访问javaBean的语法

    1)导入javaBean类
    <%@ page import="com.zhongcunmu.bean.Person" %>

    2)声明javaBean对象
    <jsp:useBean id="person1" class="com.zhongcunmu.bean.Person"></jsp:useBean>

    3)访问javaBean属性
    <jsp:getProperty property="name" name="person1"/><br>
    <jsp:setProperty property="name" name="person1" value="zcm"/><br>
    <jsp:setProperty property="name" name="person1" prama="myname"/><br>

    11. javaBean的作用域
    scope可选值为application,session,request,page
    选择相应的scope值就可以获得相同的生命周期
    然后可以使用javaBean的id作为属性通过getAttribute属性获得对应的javaBean对象,原理实际上根据作用域不同,
    在servlet类中生成了javaBean相应的局部变量,成员变量或者静态变量查看生成的对应servlet源码即可知道。

    12. servlet源码分析
    1)每个Servlet都必须实现Servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,
    它实现了Servlet接口,而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet
    接口,所以我们定义的HttpServlet只需要继承HttpServlet父类即可。

    2)Servlet接口中定义了一个service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest
    与ServletResponce转换为HttpServletRequest与HtppServletResponce.

    3)在HttpServlet类的service方法中,首先获得请求的方法名,然后根据方法名调用对应的doXXX方法。

    4)在HttpServlet类中定义的doGet个doPost等都是直接返回错误信息,因此我们需要重载这些错误处理方法。

    13. servlet生命周期
    1)servlet的启动阶段
    在下列时刻Servlet容器装载Servlet:
    Servlet容器启动时自动装载某些Servlet
    在Servlet容器启动后,客户首次向Servlet发出请求
    Servlet的类文件被更新后,重新装载Servlet

    Servlet被装载后,servlet容器创建一个Servlet实例,并调用servlet的init方法,在servlet整个生命周期
    中,init方法只会被调用一次。

    2)Servlet响应客户请求阶段
    对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponce
    对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息、处理该请求,
    并通过ServletResponce对象向客户端返回响应结果。

    3)Servlet终止阶段
    当web应用被终止,或Servlet容器终止运行,或者Servlet容器重新装载Servlet的新实例时,servlet容器会调用
    Servlet的destory方法,在destory方法中,可以释放Servlet所占用的资源。


    14. Session的运行机制
    1)当一个Session开始时,Servlet容器将创建一个HttpSession对象,在HttpSession对象中可以存放客户的
    状态信息
    2)Servlet容器为HttpSession分配一个唯一的标识符,称为Session ID,并作为Cookie保存在客户浏览器中
    3)每次客户发出Http请求时,Servlet容器可以从HttpServletRequest对象中读取Session ID,然后根据ID
    找到相应的HttpSession对象。从而获取客户的状态信息。


    15. EL表达式
    EL目的是帮助产生无java脚本的jsp网页

    EL默认对象
    param: a map containing request parameters and single string values
    sessionScope: a map containing session-scoped attributes and their values
    applicationScope: XXX attributes and their values
    requestScope: XXX attributes and their values
    pageScope: XXX attributes and their values
    pageContext: the PageContext object
    paramValues: a map containings request parameters and their corresponding string arrays(适用于checkbox等同一name的数组)
    header: a map containing header names and single string
    headrValues: a map containing header names and single string values(同样也是数组概念)
    cookie: a map containing cookie names and their values

    例如:
        <form action="EL2.jsp">
            username:<input type="text" name="username">
            interest:<br>
            basketball<input type="checkbox" name="interset" value="basketball"><br>
            badminton<input type="checkbox" name="interset" value="badminton"><br>
            reading<input type="checkbox" name="interset" value="reading"><br>
            <input type="submit" value="submit">
        </form>
        
        <%session.setAttribute("version", "1.01") ;%>

    以下EL表达式的等同效果
        <%= request.getParameter("username") %><br>
        ${param.username }<br>
        <%= request.getParameterValues("interest")[1] %>
        ${paramValues.interset[1] }<br>
        <%= session.getAttribute("version") %>
        ${sessionScope.version }<br>
        

    EL表达式运算符(有的有两种表示方法)
    运算符
    +
    -
    *
    /  div
    %  mod
    ==  eq
    != ne
    < lt
    > gt
    <= le
    >= ge

    EL表达式的逻辑运算符
    && and
    || or
    ! not

    .与[]运算符
    ${sessionScope.user.sex}等于
    ${sessionScope.user["sex"]}
    当要存取的属性名称包含一些特是字符如.- 等非字母或数字的符号,就一定要使用[]

    EL变量
    EL存取变量默认会先从Page范围找,找不到再以此从Request、Session、Application范围,没有则返回null

    自动转变类型
    ${param.count+20}    //会将传来的count自动转换为数值类型

    16. 创建客户化jsp标签的步骤
    1)创建标签的处理类
    2)创建标签库描述文件(标签库描述文件的后缀名是.tld,必须与web.xml一个目录下)
    3)在jsp文件中引入标签库,然后插入标签


    17. 两种cookie
    1)持久性的cookie,会被存储到客户端的硬盘上
    2)会话cookie,不会存储到客户端的硬盘上,而是存放在浏览器进程所处的内存当中,当浏览器关闭的话该会话cookie就被销毁了


    18. jQuery 选择器
    基本选择器
    #id   根据给定的id匹配一个元素
    例子:$("#button1")   //选取id为button1的元素
    .class 根据给定的类名匹配元素,返回集合
    例子:$(".left")  //选取所有class为left的元素
    element 根据给定的元素匹配,返回集合
    例子:$("textarea")  //选取所有的<textarea>元素
    *   匹配所有元素
    例子:$("*")
    selector1,selector2,...selectorN  将每一个选择器匹配到元素后合并一起返回
    例子:$("div,span,p.myClass")  //选取所有的<div>,<span>,及myClass类的<p>元素

    层次选择器
    $("ancestor eescedant") 选取ancestor元素里面的所有后代元素
    例子:$("div span")  //选取div里面的所有span元素
    $("parent > child")  选择parent下面的直接子元素
    例子:$("div > span")  //选择div下面直接的span子元素
    $("prve+next")  选取紧接在prev元素后面的next元素
    有等价next方法
    例子:$('.one+div')  //选择class为one的下一个div元素
    例子:$(".one").next("div")  //选择class为one的下一个div元素
    $("pre~sib")  选取pre元素后的所有sib元素
    有等价的nextAll方法
    例子:$('#two~div')  //选取id为two的元素后面所有div兄弟元素
    例子:$("#two").nextAll("div")  //选取id为two的元素后面所有div兄弟元素

    过滤选择器
    1)基本过滤
    :first   选取第一个元素
    :last    选取最后一个元素
    :not(selector)   除去所有与给定选择器匹配的元素
    :even    选取所有索引是偶数的元素,索引从0开始
    :odd     选取所有索引是奇数的元素
    :eq(index)   选取索引是index的元素
    :gt(index)   选取索引大一index的元素
    :lt(index)   选取索引小于index的元素
    :header      选取所有的标题元素
    :animated    选取当前正在执行的动画元素

    例子:
    $("div:first")   //选取所有div元素中的第一个元素
    $("input:not(.myClass)")  //选取class不是myClass的input元素

    2)内容过滤
    :contains(text)  //选取所有文本内容为text的元素
    :empty           //选取不包含子元素或者文本为空的元素
    :has(selector)   //选取含有选择器所匹配的元素的元素
    :parent          //选取拥有子元素护着文本的元素

    例子:
    $("div:contains('我')")    //选取含有’我‘的div元素
    $("div:empty")             //选取不含子元素的div元素
    $("div:has(p)")            //选取含有p元素的div元素
    $("div:parent")            //选取含有子元素的div元素

    3)可见性过滤
    :hidden     //选取所有不可见元素
    :visible    //选取所有可见元素

    例子:
    $("div:hidden").show(8000).css("background", "yellow");  //将隐藏的div元素8秒钟显示出来并设置颜色

    4)属性过滤器
    [attribute]            //选取拥有此属性的元素
    [attribute=value]      //选取属性值为value的元素
    [attribute!=value]     //选取属性值不等于value的元素
    [attribute^=value]     //选取属性值以value开头的元素
    [attribute$=value]     //选取属性值以value结尾的元素
    [attribute*=value]     //选取属性值含有value的元素
    [selector1][selector2][selectorN]  //用属性选择器合成一个复合属性选择器,满足多个条件

    例子:
    $("")
    $("div[id]")   //选取拥有属性id的元素
    $("div[title=test]")  //选取属性title为test的元素
    $("div"[id][title$=test])   //选取拥有属性id并且title以test结尾的div元素

    5)子元素过滤
    :first-child   //选取每个父元素的第一个子元素
    :last-child    //选取每个父元素的最后一个子元素
    :only-child    //如果每个元素是它父元素中唯一的子元素,那么将会匹配

    例子:
    $("ul li:first-child")   //选取每个ul中的第一个li

    6)表单对象过滤
    :enabled     //选取所有可用元素
    :disabled    //选取所有不可用元素
    :checked     //选取所有被选中(单选框,复选框)元素
    :selected    //选取所有被选中(下拉列表)元素

    例子:
    $("#form1:enabled")   //选取id为form1的表单内所有可用元素
    $("#form2:disabled")  //选取id为form2的表单内所有不可用元素
    $("input:checked")    //选取所有被选中的input元素
    $("selectselected")   //选取所有被选中的选项元素

    表单选择器
    :input      //选取所有的input,textarea,select,button元素
    :text       //选取所有的单行文本框
    :password   //选取所有的密码框
    :radio      //选取所有的单选框
    :checkbox   //选取所有的多选框
    :submit     //选取所有的提交按钮
    :image      //选取所有的图像按钮
    :reset      //选取所有的重置按钮
    :button     //选取所有的按钮
    :file       //选取所有的上传域
    :hidden     //选取所有的不可见元素

    18. jQuery 操作DOM对象
    1)查询
    例子:
    var p = $("p");
    var li = $("ul li:eq(1)");

    var title = p.attr("title");
    var title2 = li.attr("title");
    var text = li.text();

    2)添加DOM对象
    append()         //向每个元素匹配的元素内部追加内容
    appendTo()       //将所有匹配元素追加到指定元素中
    prepend()        //向每个匹配的元素内部前置内容

    remove()
    replaceWith()
    replaceAll()
    clone()
    wrap()
    wrapInner()

    属性方法
    attr()
    removeAttr()

    例子:
    $("p").append("<b>你好</b>")  结果:<p><b>你好</b></p>
    $("<b>你好</b>").appendTo("p")

    var li1 = $("<li title='a'>a</li>");
    var li2 = $("<li title='b'>b</li>");
    var li3 = $("<li title='c'>c</li>");

    $("ul").append(li1);
    $("ul").prepend(li2);
    $("ul li:eq(4)").after(li3);
    $("ul li:eq(2)").insertAfter("ul li:eq(4)");

    js实现
    var input = document.createElement("input");
    input.setAttribute("type","text");
    input.setAttribute("value",i);
    //alert(document.getElementsByTagName("input").length);
    var br = document.createElement("br");
    document.getElementById("div1").appendChild(input);
    document.getElementById("div1").appendChild(br);


    //remove方法会返回被移除节点的jquery对象
    //$("ul li:eq(1)").remove();
    var removeLi = $("ul li:eq(3)").remove();
    //alert(removeLi);
    //alert("555");
    removeLi.appendTo($("ul"));
    $("ul li").remove($("li[title!=2]"));

  • 相关阅读:
    iOS 解析xml
    带滚动条html,js获取鼠标位置
    iOS ViewController利用代理页面传值
    Android Volley完全解析
    32位linux中无法使用AVD的解决方案
    8年前在公交上被年轻小伙打了,76岁大爷苦练功夫“复仇”成功...网友:大爷,你一定是天蝎座的吧
    退学,离家出走,卖房创业,在他即将烧完最后一笔钱时,获250万元融资
    夏普将在迪拜推出植物工厂种草莓
    国产手机出货量今年要追平苹果三星,到底有多难?
    原生ajax动态添加数据
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/5098825.html
Copyright © 2011-2022 走看看