Jsp语法

在web访问中常用的服务器提示代码:404表示未找到页面文件(排错:文件名错误,或路径错误),500表示编译错误

一、jsp的基本结构

 1 <!-- JSP中的指令标识,只能jsp文件中,包含对当前jsp文件的属性设置,比如:语言,编码,导入包 -->
 2 <%@ page language="java" contentType="text/html; charset=gb2312" %>
 3 <%@ page import="java.util.Date" %>
 4 <!-- HTML标记语言 -->
 5 <html>
 6   <head><title>JSP页面的基本构成</title></head>
 7   <body>
 8    <center>
 9 <!-- 嵌入的Java代码 -->
10     <% String today=new Date().toLocaleString(); %>
11 <!-- JSP表达式 -->
12     今天是:<%=today%>
13 <!-- HTML标记语言 -->
14    </center>
15   </body>
16 </html>

 

二、举例,使用<%…… %>

 1 <%@page import="java.util.*"%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 4 <!DOCTYPE html>
 5 <html>
 6 <head>
 7 <meta charset="UTF-8">
 8 <title>Insert title here</title>
 9 <script src="js/js.js"></script>
10 </head>
11 <body>
12     <%
13         //将数组遍历到页面表格中
14         String[][] data = { { "1", "Jack", "M" }, { "2", "Tom", "M" }, { "3", "Lucy", "F" }};
15         LinkedList<HashMap<String, String>> list = new LinkedList<HashMap<String, String>>();
16 
17         for (int i = 0; i < data.length; i++) {
18             HashMap<String, String> map = new HashMap<String, String>();
19             map.put("id", data[i][0]);
20             map.put("name", data[i][1]);
21             map.put("sex", data[i][2]);
22             list.add(map);
23         }
24         //迭代器
25         Iterator<HashMap<String, String>> it = list.iterator();
26     %>
27     <table border="1" align="center" width="500">
28         <caption>学生信息表</caption>
29         <tr>
30             <th>id</th>
31             <th>姓名</th>
32             <th>性别</th>
33         </tr>
34         <%
35             while (it.hasNext()) {
36                 Map<String, String> map = it.next();
37         %>
38         <tr>
39             <td><%=map.get("id")%></td>
40             <td><%=map.get("name")%></td>
41             <td><%=map.get("sex")%></td>
42         </tr>
43         <%
44             }
45         %>
46     </table>
47 </body>
48 </html>

 

三、JSP的指令标识

语法格式:<%@ 指令名称 属性1="属性值" 属性2="属性值" …%>

1、  page指令,是用于初始当前jsp

语法格式:<%@ page
          [ language="java" ]
          [ contentType="mimeType;charset=CHARSET" ]
          [ import="{package.class|pageage.*},…" ]
          [ extends="package.class" ]
          [ session="true|false" ]
          [ buffer="none|8kb|size kb ]
          [ autoFlush="true|false" ]
          [ isThreadSafe="true|false" ]
          [ info="text" ]
          [ errorPage="relativeURL" ]
          [ isErrorPage="true|false" ]
          [ isELIgnored="true|false" ]
          [ pageEncoding="CHARSET" ]
%>

【属性说明】

language属性:设置当前页面中编写JSP脚本使用的语言,默认值为java,例如:<%@ page language="java" %>上述代码设置了当前页面中使用Java语言来编写JSP脚本,目前只能设置为Java。

contentType属性:设置页面响应的MIME类型,通常被设置为text/html,例如:<%@ page contentType="text/html;charset=utf-8" %>如果该属性设置不正确,如设置为text/css,那么客户端浏览器在显示HTML样式时,不能对HTML标识进行解释,而直接显示HTML代码。

import 属性:import属性类似于Java中的import语句,用来向JSP文件中导入需要用到的包。在Page指令中可多次使用该属性来导入多个包。例如:

1 <%@ page import="java.util.*" %>
2 <%@ page import="java.text.*" %>
3 或者通过逗号间隔,来导入多个包。
4 <%@ page import="java.util.*,java.text.*" %>

在JSP中已经默认导入了以下包:

java.lang.*

javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.*

所以,即使没有通过import属性进行导入,在JSP页面中也可以调用上述包中的类。

若要在页面中使用编写的JavaBean,也可通过import属性来导入。还可以通过<jsp:useBean>动作标识来创建一个JavaBean实例进行调用。

extends属性:extends属性用于指定将一个JSP页面转换为Servlet后继承的类。在JSP中通常不会设置该属性,JSP容器会提供继承的父类。并且如果设置了该属性,一些改动会影响JSP的编译能力。

session属性:该属性默认值为true,表示当前页面支持session,设为false表示不支持session。

buffer属性:该属性用来设置out对象(JspWriter类对象)使用的缓冲区的大小。若设置为none,表示不使用缓存,而直接通过PrintWriter对象进行输出;如果将该属性指定为数值,则输出缓冲区的大小不应小于该值,默认值为8KB(因不同的服务器而不同,但大多数情况下都为8KB)。

autoFlush属性:该属性默认值为true,表示当缓冲区已满时,自动将其中的内容输出到客户端。如果设为false,则当缓冲区中的内容超出其设置的大小时,会产生“JSP Buffer overflow”溢出异常。

注意:若buffer属性设为none,则autoFlush不能设为false。

isThreadSafe属性:该属性默认值为true,表示当前JSP页面被转换为Servlet后,会以多线程的方式来处理来自多个用户的请求;如果设为false,则转换后的Servlet会实现SigleThreadModel接口,该Servlet将以单线程的方式来处理用户请求,即其他请求必须等待直到前一个请求处理结束。

info属性:该属性可设置为任意字符串,如当前页面的作者或其他有关的页面信息。可通过Servlet.getServletInfo()方法来获取设置的字符串。例如:

<%@ page info="This is index.jsp!" %>

<%=this.getServletInfo()%>  

errorPage属性:该属性用来指定一个当前页面出现异常时所要调用的页面。如果属性值是以“/”开头的路径,则将在当前应用程序的根目录下查找文件;否则,将在当前页面的目录下查找文件。

isErrorPage属性:将该属性值设为true,此时在当前页面中可以使用exception异常对象。若在其他页面中通过errorPage属性指定了该页面,则当前者出现异常时,会跳转到该页面,并可在该页面中通过exception对象输出错误信息。相反,如果将该属性设置为false,则在当前页面中不能使用exception对象。该属性默认值为false。

isELIgnored属性:通过该属性的设置,可以使JSP容器忽略表达式语言“${}”。其值只能为true或false。设为true,则忽略表达式语言。

pageEncoding 属性:该属性用来设置JSP页面字符的编码(utf-8、gb2312、gbk)。默认值为ISO-8859-1。

 

2、include指令,在当前使用该指令的位置嵌入其他的文件,包含文件

         语法格式 :<%@ include file="文件的绝对路径或相对路径" %>

                   例:<%@include file="header.jsp" %>

3、taglib指令,在当前使用该指令的位置嵌入其他的文件,包含文件

         语法格式:<%@ taglib uri="tagURI" prefix="tagPrefix" %>

                   例:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

         推荐使用jstl包中标签,步骤如下:

                   第一步:下载jstl包,到网上搜索jstl-1.2.jar包

                   第二步:复制标签库到WEB-INF下的lib文件夹中

  

 

     第四步:使用库中的标签

                            使用标签的值的方法,用EL 语言,${变量名 }进行输出值

                            a、设置变量标签:

                                               <c:set var=”变量名” value=”变量值”></c:set>

                                               使用:${变量名 }

                            b、条件标签:

                                               <c:if test=”${关系表达式|逻辑表达式}”>

                                                        条件成立时输出语句

                                              </c:if>

 

    例:
<c:set var="age" value="16" ></c:set>
    
    ${age }<br>
    
    <c:if test="${age >=18 }">
        <c:out value="成年人,非犯法的事都 可以做"></c:out>
    </c:if>
    <c:if test="${age <18 }">
        <c:out value="未成年人,有些事不能做!"></c:out>
    </c:if>

 

 

c、迭代标签(循环)
                    (1)迭代值(与for循环一样)
                <c:forEach var=”显示变量名” begin=”初始值” end=”结束值” step=”步长”>
                        使用变量:${显示变量名 }
                </c:forEach>
                    <ul>
                    <c:forEach var="i" begin="1" end="10" step="2">
                        <li>${i }</li>
                    </c:forEach>
                    </ul>
                    (2)迭代集合(与for…in…循环一样)
                        <c:forEach var=”显示变量名” items=”集合”>
                            使用变量:${显示变量名 }
                        </c:forEach>
<ul>
        <c:forEach var="v" items="${valArr }">
            <li>${v }</li>
        </c:forEach>
    </ul>

四、jsp的脚本标识

         1、jsp表达式

                   表达式用于向页面中输出信息,其使用格式为:

<%= 变量或可以返回值的方法或Java表达式 %>

                            例:在页面上输出一个变量值,<%=str %>

1、  声明标识

在JSP页面中可以声明变量或方法,其声明格式为:

           <%! 声明变量或方法的代码 %>

         例:

<%!

       //声明,给当前的jsp生成的servlet类添加成员变量,和方法

       String name="张三";

       String showInfo(){

           return this.getServletInfo();

       }

    %>

    <%=this.name %><br>

<%=this.showInfo() %><br>

         3、脚本程序

                   在JSP页面中使用“<%”与“%>”标记起来的一段Java代码,语法格式:

                            <% Java程序片段 %>

                   例:<%

              //java代码片段,片段都可以连接起来

              int age=20;

           %>

五、JSP的注释

1  HTML中的注释: <!-- 注释内容 –>

2  带有JSP表达式的注释 :<!-- 注释内容<%=expression %>-->

3  隐藏注释 :<%-- 注释内容 --%>

4  脚本程序(Scriptlet)中的注释

a、 单行注释,使用“//”

b、 多行注释,使用“/* 注释内容 */”

c、 提示文本注释,使用“/** 文档注释内容 */”

 

六、jsp动作标识

    在请求处理阶段按照在页面中出现的顺序被执行的,只有它们被执行的时候才会去实现自己所具有的功能。

    语法格式:

       <jsp:动作标识名称 属性1="值1" 属性2="值2"…/>

<jsp:动作标识名称 属性1="值1" 属性2="值2" …>

    <子动作 属性1="值1" 属性2="值2" …/>

</jsp:动作标识名称>

1、文件包含标识:<jsp:include> 和<%@ include file=”文件路径”>功能相同

    例:<jsp:include page="header.jsp" />

语法格式:

<jsp:include page="被包含文件的路径" flush="true|false"/>

或者向被包含的动态页面中传递get参数:

<jsp:include page="被包含文件的路径" flush="true|false">

    <jsp:param name="参数名称" valude="参数值"/>

    ……

</jsp:include>

说明:<jsp:param name="参数名称" valude="参数值"/>表示向包含的页面传递get参数

例:<jsp:include page="header.jsp" >

        <jsp:param value="张三" name="uname"/>

        <jsp:param value="xs0001" name="uid"/>

</jsp: include >

 

2、转发标识:<jsp:forward> 和servlet中的转发方法是一样的

例:<jsp:forward page="index.html" />

语法格式:

<jsp:forward page="文件路径 | 表示路径的表达式"/>

如果转发的目标是一个动态文件,还可以向该文件中传递参数,使用格式如下:

<jsp:forward page="被包含文件的路径" flush="true|false">

    <jsp:param name="参数名称" valude="参数值"/>

</jsp:forward>

例:<jsp:forward page="header.jsp" >

        <jsp:param value="张三" name="uname"/>

        <jsp:param value="xs0001" name="uid"/>

</jsp:forward>

转发与转向的区别

转向

js,可以使用location.href

servlet使用request.sendRedirect("url");

转发

jsp,使用<jsp:forward page="url"></jsp:forward>

servlet,使用request对象

区别:

1、url中转向会重定向地址(转向也称为重定向)

2、转发,不执行当前页面,去执行转发页面,并且不会重定向,可以保护转参数。转发之前,可以使用request.setAttribute设置当前需要转发到指定页面的数据,可以使用requet.getAttribute来获得(或使用EL表达式获得${变量名 })

3、转向只能通过地址栏传递参数,不能通过request.setAttribute方法传递数据,接收数据只能使用request.getParameter(),而不能使用EL表达式

4、转发只能在servlet和jsp中使用;转向可以任何页面中使用

 

 

 

3、bean标识:<jsp:useBean> ,使用该标识可以自动实例化一个类,往往和“<jsp:setProperty>”,“<jsp:getProperty>”搭配使用进行操作实例化对象

    理解:什么javaBean。bean就是封装的一个类实例化的对象,通过使用useBean动作标识可直接实例化对象,调用该对象的成员

语法格式:

<jsp:useBean

    id="对象变量名"

     scope="page|request|session|application"

     {

        class="package.className"|

          type="数据类型"|

          class="package.className" type="数据类型"|

          beanName="package.className" type="数据类型"

     }

/>

 

也可以在标识体内嵌入子标识或其他内容(操作属性成员):

<jsp:useBean id="变量名" scope="page|request|session|application" …>

    <jsp:setProperty name="变量名" property="*"/>

</jsp:useBean>

【说明】

id:表示该Bean实例的对象名

type=”类型”:表示该Bean实例的类型(本类,父类,接口)

scope:表示该Bean实例的使用范围(request(请求),seesion(当前会话),application(当前应用程序),page(默认,当前页面))

class="包路径.类名":指定Bean实例化的类 ,不能为抽象类,必须有无参的构造方法,Bean没有type属性时,必须有class属性。

 

4、设置属性标识<jsp:setProperty>

语法格式:

<jsp:setProperty

    name="Bean实例名"

     {

      property="*" |

          property="propertyName" |

          property="propertyName" param="parameterName" |

          property="propertyName" value="值"

     }/>

 

【说明】

name:表示指定bean的id

property:表示指定对象的属性名

property="propertyName" value="值":表示给指定的属性设置值

property="propertyName" param="parameterName":表示将获得request提交的参数名赋值给指定的属性

5、获得指定bean对象的指定属性的值<jsp:getProperty> ,如果指定Bean中的属性是一个对象,那么该对象的toString()方法被调用,并输出执行结果

 

 

七、EL和JSTL

    1 、EL

       使用条件:jsp中设置page指令的isELIgnored="false"

理解EL(Expression Language,即表达式语言)表达式,其实就是简化使用变量/对象过程,使得更简单的方法(直接“.”对象的成员)来进行访问

功能:替代JSP页面中的复杂代码

       语法格式:

n  ${变量名 }  表示访问一个变量(只针对基本数据类型,如果是对象,则调用toString())

例:

设置变量:<c:set var="age" value="20"></c:set>

  使用EL访问显示变量:${age}

n  ${对象.属性名 } 、  ${对象['属性名'] }或${对象.方法成员名() }

【注意】:如果是在java代码中(jsp中的代码段或servlet)定义变量或对象,要使用EL在jsp中进行显示操作时,必须使用request.setAttribute(“标识”)把变量或对象转发(toForword()方法)到jsp文件

    例:

    <br><br>-----使用使用java代码脚本获得提交表单中的数据---------<br>

    <%

       String uname= request.getParameter("uname");

       String upwd= request.getParameter("upwd");

       String sex= request.getParameter("usex");

      

       UserBean u=new UserBean();

       u.setUname(uname);

       u.setUpwd(upwd);

       u.setSex(sex);

      

       request.setAttribute("u", u);  //设置对象对jsp页面中,可以在jsp中操作

      

       String str=String.format("姓名:%s,密码:%s,性别%s", uname,upwd,sex);

      

       System.out.println(str);//输出到控制台

       out.println(str); //在jsp页面中输出

   

    %>

    <br>

    用户名:${u.uname } <br>

    密码:${u.upwd }<br>

    性别:${u.sex }<br>

    ${u }<br>

    访问toString()方法:${u.toString() }<br>

 

 

2、EL特定的变量属性范围名称

属性范围

            EL中的名称

page

pageScope,例如${pageScope.username},表示在page范围内查找username变量,找不到返回Null

request

requestScope

session

sessionScope

application

applicationScope

cookie

cookie.cookie名.value

例:

<c:set var="age" value="20"></c:set>

使用pageScope引用age变量:${pageScope.age }<br>

 

request.setAttribute("uname", uname);

request.setAttribute("u", u);//设置对象对jsp页面中,可以在jsp中操作

 

application.setAttribute("price", 200);

使用applicationScope引用price变量:${applicationScope.price }<br>

 

 

 

3、EL中的运算符

         a)属性运算符:“.”或”[]”,“[]”可以获得属性,如果对象是集合时,可以根据索引获得元素。

         例:

      

 1    <%
 2 
 3        List<String[][]> li=new LinkedList<String[][]>();
 4 
 5        String[][] info={
 6 
 7               {"张三","22",""},
 8 
 9               {"李四","21",""},
10 
11               {"小花","19",""},
12 
13               {"大拿","30",""}
14 
15        };
16 
17        li.add(info);
18 
19        request.setAttribute("list", li);
20 
21       
22 
23     %>
24 
25     <table border="1" width="500" align="center">
26 
27        <caption>信息</caption>
28 
29        <tr>
30 
31            <th>姓名</th>
32 
33            <th>年龄</th>
34 
35            <th>性别</th>
36 
37        </tr>
38 
39        <c:forEach var="row" items="${requestScope.list[0] }">
40 
41            <tr>
42 
43            <c:forEach var="val" items="${row }">
44 
45               <td>${val }</td>
46 
47            </c:forEach>
48 
49            </tr>
50 
51        </c:forEach>
52 
53       
54 
55     </table>

 

 

 

 

 

 

 

 
posted @ 2021-03-15 14:56  outsider078  阅读(202)  评论(0)    收藏  举报