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>

浙公网安备 33010602011771号