美文网首页
Java Web(JSP)

Java Web(JSP)

作者: shawXXQ | 来源:发表于2018-03-19 11:16 被阅读0次

    JSP是在HTML文档中嵌入java代码的技术,本质上是一个servlet类,因为在服务器端会被编译为一个servlet类来执行,相关HTML语句被编译为字符串形式执行,JSP出现的原因也就是在servlet中书写字符串类型的HTML语句繁琐且容易出错,而在jsp页面中HTML语句则可按照原来的规范书写,转换工作交由服务器端完成即可

    jsp注释

    <%-- --%>:jsp标准注释,不会被编译,不能通过查看源代码查看到
    <!-- --!>:HTML注释,会被编译
    <% %>:jsp代码
    <%= %>:jsp输出
    <%! %>:声明变量或方法,多个变量使用,分隔
    <%/* */%>、<%// %>:多行注释、单行注释
    

    编译指令

    (包含在<%@ %>之间的部分)

    page指令:用来定义JSP文件中的全局属性
    Include指令:用来将指定位置上的资源包含在当前JSP文件中
    taglib指令:当JSP页面中引用了用户自定义标签时,用来声明这些用户自定义标签的,用法:<%@taglib=”taglibURL”(唯一确定标签库的位置) prefix=”tagPerfix”(定义标签中的前缀字符串)%>

    动作指令

    <jsp:include>:用于在客户端请求时间内把静态或者动态的资源包含在JSP页面,包含的资源在page属性中用URL形式指定
    用法:<jsp:include page=”fileName” flush=”true”>

    <jsp:forward>:将请求转发到其他JSP页面、HTML页面或者servlet类
    用法:<jsp:forward page=”url”/>

    <jsp:param>:用于传递参数,为其他动作指令提供附加信息,和<jsp:include>、<jsp:forward>等指令一起使用
    用法:<jsp:param name=”paraName(参数名)” value=”paramValue(传递的参数值)”>

    JSP内置对象

    ①request:用来接收客户端提交的各种信息
    常用方法:getParameter(String name)获取客户端传递给服务器的各种参数,name指定表单中参数的名字;getParameterNames()获取客户端传递给服务器的所有参数的名字,返回一个枚举类型
    Request对象的getAttribute(String name)、setAttribute(String name,Java.long.Object.objt)方法可以用来保存和读取数据

    ②response: response对象是服务端向客户端返回的数据,使用sendRedirect(String location)方法可以实现页面的转向(与<jsp: forward>的区别是response的参数可以是相对路径也可以是一个合法的URL,并且是一种完全跳转)

    ③out:动态的向JSP页面输出字符流,进而把动态的内容转化为HTML形式展示

    ④session:用来保存每个用户的信息,常用方法:getAttribute(String name)获取名字为name的属性、getAttributeNames()返回存储在session对象中的的所有属性的名字,结果为一个枚举类型、setAttribute(String name,Java.lang.Object value)设置一个名字为name的属性,其值为value

    ⑤application:保存着整个web应用运行期间的全局数据和信息,常用方法:getAttribute(String name)返回application对象中名字为name的属性的值、setAttribute(String name,Object object)在application对象中设置一个名字为name的属性,其值为object

    ⑥pageContext(JSP作用域通信对象):提供访问其他内置对象的统一方法,方法:getRequest()、getResponse()、getServletConfig()、getServletContext()、getSession()、setAttribute()、removeAttribute()

    ⑦config:代表当前jsp页面的配置信息(在Servlet中用处较大)

    ⑧exception:用来封装运行时出现的异常信息

    ⑨page:指向当前jsp页面本身(类似于this指针),表示当前jsp页面转换后的servlet类的实例


    JavaBean

    JavaBean是符合一定规范的java类,其封装了一系列的私有属性并提供get和set方法

    JavaBean与jsp页面的交互:<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>
    JavaBean

    public class Userbean {
        private String username;
        private String pwd;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    }
    

    jsp_form:

        <form action="./AcceptForm.jsp" method="POST">
            用户名:<input type="text" name="username"/>
            密码:<input type="password" name="pwd">
            <input type="submit" value="提交"/> 
        </form>
    

    jsp_accept_form:

    <%
        request.setCharacterEncoding("utf-8");
     %>
         <jsp:useBean id="user1" class="com.test.javabean.Userbean"></jsp:useBean>
        <jsp:setProperty property="username" name="user1"/>
        <jsp:setProperty property="pwd" name="user1"/>
        <%--获取JavaBean对象中的值的两种方法 --%>
        <%= user1.getUsername()+':'+user1.getPwd()%>
        <jsp:getProperty property="username" name="user1"/>
        <jsp:getProperty property="pwd" name="user1"/>
    </body>
    

    JSP自定义标签

    不带属性的自定义标签:

    jsp

    <%@ page contentType="text/html;charset=utf-8"%>
    <%@ taglib prefix="mytag" uri="/mytag" %>
    <html>
      <head>
        <title>简单标签实例</title>
      </head>
      
      <body>
        <h3>调用mytag标签库中的print标签</h3>
        调用print标签的结果:<mytag:print/>
      </body>
    </html>
    

    标签解析类

    public class MytagPrint extends TagSupport{
            @Override
            public int doStartTag() throws JspException {
                try {
                    pageContext.getOut().print("Hello Tag!");
                } catch (IOException e) {
                    throw new JspTagException("SimpleTag:"+e.getMessage());
                }
                return SKIP_BODY;
            }
            @Override
            public int doEndTag() throws JspException {
            // TODO Auto-generated method stub
            return EVAL_PAGE;
            }
    }
    
    不带属性的自定义标签.png

    带属性值的自定义标签

    jsp

    <%@ page contentType="text/html;charset=utf-8"%>
    <%--prefix为自定义标签的前缀,uri为tld文件地址--%>
    <%@ taglib prefix="mytag" uri="/mytag" %>
    <html>
      <head>
       <title>带属性标签实例</title>
      </head>
      
      <body>
        <h3>调用mytag标签库中的printa标签</h3>
        打印后不换行:<mytag:printa value="Hello Tag" type="0" />
        打印后换行:   <mytag:printa value="Hello Tag" type="1" />
        打印后不换行:<mytag:printa value="Hello Tag" type="0" />
      </body>
    </html>
    
    

    标签解析类

    public class MytagPrinta extends TagSupport{
        protected String value=null;
        protected String type="0";
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        @Override
        public int doStartTag() throws JspException {
                try {
                    if(type.equals("0"))
                    pageContext.getOut().print("Hello Tag!"+value);
                    else
                    pageContext.getOut().print("Hello Tag!"+value+"<br/>");
                } catch (Exception e) {
                    throw new JspTagException("attrTag:"+e.getMessage());
                }
                //忽略标签体
                return SKIP_BODY;
        }
        @Override
        public int doEndTag() {
            //继续执行剩下页面的代码
            return EVAL_PAGE;
        }
    }
    
    带属性值得自定义标签.png
    mytag.tld文件
    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"  
        version="2.0">
    <display-name>mytag标签库</display-name>
    <tlib-version>2.0</tlib-version>
    <short-name>mytag</short-name>
    <uri>/mytag</uri>
        <tag>
            <name>print</name>
            <tag-class>tags.MytagPrint</tag-class>
            <body-content>empty</body-content>
        </tag>
    
        <tag>
            <description>带有type和value属性的printa标签</description>
            <name>printa</name>
            <tag-class>tags.MytagPrinta</tag-class>
            <body-content>empty</body-content>
            <attribute>
                <name>type</name>
                <required>false</required>
            </attribute>
            <attribute>
                <name>value</name>
                <required>true</required>
            </attribute>
        </tag>
    </taglib>
    

    JSTL

    JSTL是JSP标准标签库,是一个开源的不断完善的标签库
    可分为Core tags(核心标签)、Formatting tags(格式化标签)、SQL tags(SQL标签)、XML tags(XML标签)、JSTL function(JSTL函数)5种

    核心标签库

    <%@ taglib prefix=”c” yri=”http://java.sun.com/jsp/jstl/core”%>

    表达式控制标签(out、set、remove、catch)

    <c:out value=”object”(要显示的数据内容)[escapeXml=”true|false”](是否转换为特殊字符,如<p></p>等字符是否要显示,默认为true)>
    </c:out>
        <c:out value="${3+7}"/> <br>
        <c:out value="<p>有特殊字符</p>" /><br>
        <c:out value="<p>有特殊字符</p>" escapeXml="false" />
    
        <c:set var="num1" scope="request" value="${3+5}"/>
    
    <c:remove var=”var” [scope=…..]/>
    
    <c:catch [var=”var”]>
      欲捕获的异常部分
    </c:catch>
    

    value(Object):需设定的范围变量或对象的属性值
    var(String):要设定的范围变量名
    scope(String):var指定变量的范围,默认值为page
    target(Object):需设定属性的对象
    property(String):需设定值的target对象的属性名称

    流程控制标签(if、choose、when、otherwise)

        <c:set var="num" scope="page" value="admin"/>
        <c:if test="${num=='admin' }" var="condition" scope="page">
            你好,admin!
        </c:if>
        <c:out value="这是判断结果:${condition}"/>
    
        <c:set var="num" value="admin" scope="page"/>
        <c:choose>
            <c:when test="${num=='guest'}">
            <c:out value="guest"/>
            </c:when>
            <c:when test="${num=='admin'}">
            <c:out value="admin"/>
            </c:when>
            <c:otherwise>
                <c:out value="other"/>
                </c:otherwise>
        </c:choose>
    
    

    循环标签(forEach、forTokens)

        <%
            String items[]=new String[5];
            items[0]="核心标签库";  items[1]="国际化标签库";
            items[2]="SQL标签库";   items[3]="XML标签库";
            items[4]="函数标签库";
            request.setAttribute("items", items);
         %>
         <b><c:out value="不指定begin和end的迭代:"/></b>
         <c:forEach var="item" items="${items }">
         &nbsp;<c:out value="${item }"/><br>
         </c:forEach>
         
         <b><c:out value="指定begin和end的迭代:"/></b>
         <c:forEach var="item" items="${items }" begin="1" end="3" step="1">
         &nbsp;<c:out value="${item }"/><br>
         </c:forEach>
         
         <b><c:out value="输出整个迭代的信息:"/></b>
         <c:forEach var="item" items="${items }" begin="3" end="4" step="1"
         varStatus="s">
         &nbsp;<c:out value="${item }"/>的四种属性:<br>
         &nbsp;&nbsp;所在位置,即索引:<c:out value="${s.index }"/><br>
         &nbsp;&nbsp;总共已迭代次数:<c:out value="${s.count }"/><br>
         &nbsp;&nbsp;是否为第一个位置:<c:out value="${s.first }"/><br>
         &nbsp;&nbsp;是否为最后一个位置:<c:out value="${s.last }"/><br>
         </c:forEach>
    

    var(String):表示当前处理对象的变量,可以用来遍历输出
    items(支持多种类型,如Array、Collection、Iterator(迭代器)等):表示循环的项目
    varStatus(String):记录循环状态的变量
    begin(int):循环的起始点
    end(int):循环的结束位置,不能小于begin
    step(int):循环步长

    <c:forTokens>:另一个迭代循环标签,用来对一个字符串进行迭代循环,这些字符串使用符号分开的
        <c:forTokens var="token" items="red,blue,yellow/red,blue/yellow,green" delims="/">
        &nbsp;&nbsp;<c:out value="${token}"/>
        </c:forTokens>
        <h4>
        使用‘|’和‘,’一起作分隔符
        </h4>
        <c:forTokens var="token" items="red,blue,yellow/red,blue/yellow,green" delims="/,">
        &nbsp;&nbsp;<c:out value="${token}"/>
        </c:forTokens>
    

    items(String):要处理的一系列以特定符号隔开的字符串
    delims(String):分隔字符集合
    var(String):输出时可用

    URL标签(import、url、redirect)

    <c:import>:引入某个URL指定的网页内容到当前jsp
    <c:rediect>和<c:param>:用来进行参数值的传递

      <c:redirect url="c_redirect2.jsp">
      <c:param name="username" value="admin" />
      </c:redirect>
    

    格式化标签库

    <%@ taglib prefix=”fmt” yri=”http://java.sun.com/jsp/jstl/fmt”%>
    不同地区对数字、货币等的表示不同,通过该标签库来根据不同的语言请求做出不同的响应
    <fmt:setLocale>:设定用户的语言地区代码

    <fmt:setLocale value=”value”(语言环境的字符串http://www.w3.org查询) [variant=””(指定web浏览器或供应商代号) [scope=....]>en表示英文、en_US表示英文(美国)、zh_CN表示中文(中国)

    <fmt:message>:根据本地化环境从资源包检索文本信息,从而实现文本的本地化

    <fmt:bundle>:用来根据本地环境来选择所需的资源包

    <fmt:setbundle>:为本地化环境设置一个默认的资源包

    <fmt:param>:指定文本消息参数值,动态的设置参数

    <fmt:timeZone>:设置时区

    <fmt:formatDate>:设定日期和时间的格式并按照设置的格式给予输出

    <fmt:parseDate>:解析日期和时间值

    <fmt:formatNumber>:格式化数值,即设定特定语言环境下的数值的输出方式

    <fmt:parseNumber>:解析数值字符串

    <%@ page  language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
      <head>
        <title>数字格式化标签实例</title>
      </head>
      
      <body>
        <font size=4>
            <fmt:setLocale value="en_US"/>
            美国:<br>
            数字格式:<fmt:formatNumber value="123456789"/><br>
            百分数格式:<fmt:formatNumber type="percent">123456789</fmt:formatNumber><br>
            货币格式:<fmt:formatNumber value="12345.67" type="currency"/><br>
            <c:set var="date" value="<%=new java.util.Date() %>"/>
                <fmt:formatDate value="${date }"
                    pattern="yyyy年MM月dd日" type="date" dateStyle="full"/><br>
                <fmt:formatDate value="${date }"
                    pattern="HH:mm:ss" type="time" timeStyle="full"/><br>
                <fmt:formatDate value="${date }"
                    pattern="yyyy年MM月dd日HH:mm:ss"
                    type="both" dateStyle="full" timeStyle="full"/><br>
                <fmt:formatDate value="${date }" type="both"
                    timeStyle="full" var="formatted"/>
                <fmt:parseDate value="${formatted }" type="both"
                    timeStyle="full" timeZone="GMT" var="parsed"/>
                <c:out value="${parsed }"/><br>             
        </font>
      </body>
    </html>
    
    fmt标签库结果.png

    SQL标签

    <%taglib prefix=”sql” uri=”http://java.xun.com/jsp/jstl/sql”%>
    使用JDBC方式连接数据库:

    <sql:setDateSource
    driver=””(数据库驱动程序字符串) url=””(数据库连接字符串) [user=””(数据库登录用户名)] [password=””] [var=””] [scope=””]/>
    

    XML标签

    <%@ taglib prefix=”x” yri=”http://java.sun.com/jsp/jstl/xml”%>
    <x:parse>解析一个XML文档

            <c:import var="doc" url="Students.xml" charEncoding="gb2312"/>
            <x:parse var="studentDoc" doc="${doc }"/>
            <c:out value="学生姓名:"/>
            <x:out select="$studentDoc/students/student/name"/><br>
            <c:out value="学生年龄:"/>
            <x:out select="$studentDoc/students/student/age"/><br>
            <c:out value="学生性别:"/>
            <x:out select="$studentDoc/students/student/sex"/><br>
    

    JSTL函数标签

    <%taglib prefix=”fn”uri=”http://java.xun.com/jsp/jstl/functions”%>

    fn:contains(string,substring):如果参数string包含参数substring,返回true
    fn:containsIgnoreCase(string,substring):……(忽略大小写)

    fn:endsWith(string,suffix):字符串string以suffix结尾,返回true

    fn:join(array,separator):将一个给定的数组array用给定的间隔符separator串在一起

    fn:replace(string,before,after):返回一个string对象,用参数after替换参数string中所有出现参数before字符串的地方

      <c:set var="s1" value="I love java web!"/>
      <%
        String[] customers={"Lester","Johnson","Jake"};
        session.setAttribute("customers", customers);
       %>
       <table cellpadding="5" border="1">
       <tr>
       <th align="Left">Input String</th><th>Result</th>
       </tr>
       <tr>
        <td>${s1}</td><td>${fn:length(s1)}</td>
       </tr>
       <tr>
        <td>${customers}</td><td>${fn:length(customers)}</td>
       </tr>
       <tr>
        <td>null</td><td>${fn:length(undefined)}</td>
       </tr>
       <tr>
        <td>empty string</td><td>${fn:length("")}</td>
       </tr>
       </table>
    

    EL表达式

    实现对session对象、request对象等存储对象的简化访问
    语法:${表达式}
    设置EL支持

    设置单个JSP页面是否支持EL(默认为支持,值为false):
    <%@ page isELIgnored=”true|false”%>
    对于整个JSP应用,修改web.xml配置文件来支持EL,格式为(false为支持)
    <jsp-property-group>
      <el-ignored>false|true</el-ignored>
    </jsp-property-group>
    

    EL应用

    ①运算符求值(+、-、*、/、gt(大于)、lt(小于)、le(小于等于)、ge(大于等于)、ne(不等于)、and、or等等)
    ②访问作用域对象,格式为${attrname(作用域变量名)}
    ③EL内置对象


    EL内置对象.png

    相关文章

      网友评论

          本文标题:Java Web(JSP)

          本文链接:https://www.haomeiwen.com/subject/ieqeqftx.html