1.JSP简介
2.JSP工作原理
3.JSP指令
3.1 page指令
<%@ page language="java" %>
属性名称 | 取值范围 | 描述 |
---|---|---|
pageEncoding | utf-8,gbk,iso8859-1等等 | 设置编码格式 |
language | java | 指明解释该JSP文件时采用的语言。一般为java语言。默认为java |
extends | 任何类的全名 | 指明编译该JSP文件时继承哪个类。JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init和destroy等方法 |
import | 任何包名,类名 | 引入该JSP中用到的类、包等。import是唯一可以声明多次的page指令属性。一个import属性可以引用多个类,中间用英文逗号隔开,如<%@ page import="java.util.List,java.util.ArrayList" %>.JSP中下面四个包里的类可以直接使用:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.* |
session | true,false | 指明该JSP时候内置Session对象。如果为true,则内置Session对象,可直接使用。否则不内置Session对象。默认为true。 |
autoFlush | true,false | 是否运行缓存。如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存在缓存里,缓存满或者程序执行完毕或执行out.flush()操作时才到达客户端。默认为true. |
buffer | none或者数字+kb | 指定缓存大小,当autoFlush设为true时有效,例如<@page buffer="10kb"%> |
isThreadSafe | true,false | 指定是否线程安全。如果为true,则运行多个线程同时运行该JSP程序,否则只运行一个线程运行,其余线程等待。默认为false |
isErrorPage | true,false | 指定该页面是否为错误处理页面。如果为true,则该jsp内置有一个Exception对象exception,可直接使用,否则没有。默认为false. |
errorPage | 某个jsp页面的相对路径 | 指明一个错误显示页面,如果该jsp程序抛出了一个未捕捉的异常,则转到errorPage指定的页面。errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常。 |
contentType | 有效的文档类型 | 客户端浏览器根据该属性判断文档类型,例如: HTML格式为 text/html 纯文本格式为 text/plain JPG图像为 image/jpeg GIF图像为 image/gif WORD文档为 application/msword |
info | 任意字符串 | 指明JSP的信息。该信息可以通过Servlet.getServletInfo()方法获取到 |
trimDirectiveWhitespaces | true,false | 是否去掉指令前后的空白字符。默认为false |
3.2include指令
3.3 taglib 指令
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<c:forEach var="item" items="arrays">
<c:out value="item"></c:out>
</c:forEach>
</body>
</html>
4.JSP行为
4.1 <jsp:include/>行为
<jsp:include flush="true" page="/head.jsp"></jsp:include>
这里是正文
<jsp:include flush="true" page="/foot.jsp"></jsp:include>
注意:<jsp:include> 与<@ include file="">的区别,
<jsp:include>是在运行时包含的,而且只包含运行结果(先运行后包含)是使用request.fetRequestDispatcher("url").forward(request.response)来执行被包含文件,<@ include file="">是在编译时包含的,包含的是源代码(先包含后运行)
5.使用java bean(POJO)
属性名 | 取值范围 | 描述 |
---|---|---|
id | 合法的java变量名 | 指明javabean对象名称。jsp中可以使用该名称引用该java bean 对象 |
class | java bean 类的全名 | java bean类的全名 |
scope | page,request,session,application | 该java bean 对象的取值范围。当为page时,只在该jsp内有效。当为request 时,只在当前的request中有效。当为session时,对当前用户有效。当为application时,当前web程序内有效。默认我为page |
package com.wang.userBean;
public class Person {
private String name;
private String age;
private String sex;
private String secret;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
}<strong>
</strong>
userBeanA.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>userBean测试</title>
</head>
<body>
<div align="center">
<form action="userBeanB.jsp" method="post">
<fieldset >
<legend>请填写Person信息</legend>
<table align="center" >
<tr>
<td align="right" style="font-weight: bold;">姓名:</td>
<td><input type="text" name="name" value="" /></td>
</tr>
<tr>
<td align="right" style="font-weight: bold;">年龄:</td>
<td><input type="text" name="age" value="" /></td>
</tr>
<tr>
<td align="right" style="font-weight: bold;">性别:</td>
<td>
<input type="radio" name="sex" value="male" />male
<input type="radio" name="sex" value="female" />female
</td>
</tr>
<tr>
<td align="right" style="font-weight: bold;"></td>
<td>
<input class="button" type="submit" name="search" value="提交Person信息" style="width:200px;"/>
</td>
</tr>
</table>
</fieldset>
</form>
</div>
</body>
</html>
userBeanB.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>userBeanB</title>
</head>
<body>
<!-- 声明Person类对象 -->
<jsp:useBean id="person" class="com.wang.userBean.Person" scope="page"></jsp:useBean>
<!-- 设置person类的所有属性,属性值从request中获取,*表示所有属性 -->
<jsp:setProperty property="*" name="person"/>
<fieldset >
<legend>请填写Person信息</legend>
<table align="center">
<tr>
<td align="right" style="font-weight: bold;">姓名:</td>
<td>
<jsp:getProperty property="name" name="person"/>
</td>
</tr>
<tr>
<td align="right" style="font-weight: bold;">年龄:</td>
<td><jsp:getProperty property="age" name="person"/></td>
</tr>
<tr>
<td align="right" style="font-weight: bold;">性别:</td>
<td>
<jsp:getProperty property="sex" name="person"/>
</td>
</tr>
<tr>
<td align="right" style="font-weight: bold;"></td>
<td>
<input type="button" οnclick="history.go(-1)" value="返回" style="width:200px;"/>
</td>
</tr>
</table>
</fieldset>
</body>
</html>
Scope实现各种计数器
package com.wang.userBean;
public class Counter {
private int count;
public int getCount() {
return ++count;
}
public void setCount(int count) {
this.count = count;
}
}
personCount.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>userBean测试</title>
</head>
<body>
<div align="center">
<!-- 声明Person类对象 -->
<jsp:useBean id="personCount" class="com.wang.userBean.Counter" scope="session"></jsp:useBean>
<jsp:useBean id="totalCount" class="com.wang.userBean.Counter" scope="application"></jsp:useBean>
<fieldset >
<legend>计数器</legend>
<table align="center">
<tr>
<td align="right" style="font-weight: bold;">您的访问次数:</td>
<td>
<jsp:getProperty property="count" name="personCount"/>
</td>
</tr>
<tr>
<td align="right" style="font-weight: bold;">总共的访问次数:</td>
<td><jsp:getProperty property="count" name="totalCount"/></td>
</tr>
</table>
</fieldset>
</div>
</body>
</html>
以上项目下载地址:http://download.csdn.net/detail/wangxuewei111/8514959
6.EL表达式
类别 | 标识符 | 描述 | 示例 |
请求参数 | Param | 包含所有参数的Map.可以获取参数(返回String) | ${param.foo} ${param[‘foo’]} |
paramValues | 包含所有参数的Map.可以获取参数(返回String[]) | 当提交多个参数,例如el.jsp?a=first&a=second,提交的参数a为多个值{“frist”,”second”}.使用param只能获取第一个值,而使用paramValues能够获取到其他的值。${param.a[0]},将输出first, ${param.a[1]},将输出second | |
头信息 | Header | 包含所有头信息的Map,可以获取头信息(返回 String) | ${header.host}可能返回localhost:8080 |
headerValues | 包含所有头信息的Map,可以获取头信息(返回 String[]) | ${header.host[0]}.当头信息为数组时可以取多个值 | |
Cookie | Cookie | 包含所有cookie的Map,key为cookie的name属性 | 使用<% response.addCookie(new Cookie(“userName”,”wangdawei”)); %> 设置cookie后,${cookie.userName}返回该cookie,而$(cookie.userName.vakue)返回“wangdawei”,$(cookie.userName.name)返回“userName” |
初始化参数 | initParam | 包含所有初始化参数的Map.可以获取初始化参数 | ${initParam.encoding} |
作用域 | PageScope | 包含page作用域内变量的Map | 使用<jsp:userBean id=”person” class=”com.wang.Person” scope=”page/”>声明pageScope范围内的Person对象后,${pageScope.person.age}将输出该对象的age属性 |
requestScope | 包含request作用域内变量的map | 使用<jsp:userBean id=”person” class=”com.wang.Person” /”>声明pageScope范围内的Person对象后,${pageScope.person.age}将输出该对象的age属性。UserBean的默认作用域为request | |
sessionScope | 包含session作用域内变量的map | 使用<jsp:userBean id=”person” class=”com.wang.Person” scope=”session/”>声明pageScope范围内的Person对象后,${ sessionScope.person.age}将输出该对象的age属性 | |
applicationScope | 包含application作用域内变量的map | 使用<jsp:userBean id=”person” class=”com.wang.Person” scope=”application/”>声明pageScope范围内的Person对象后,${ applicationScope.person.age}将输出该对象的age属性 | |
| pageContext | 包含页面内的变量的Map,包含request,response,page,application,config等所有隐藏对象 | ${pageContext.request.remoteAddr}将返回客户端ip地址。相当于执行<%= pageContext.getRequest().getRemoteAddr() %> |