1、JSP注释
<!-- 增加JSP注释 -->
<%-- JSP注释部分 --%>
<!-- 增加HTML注释
-->
<!-- HTML注释部分 -->
2、输出JSP表达式:<%=表达式 %>
3、JSP脚本:
<table bgcolor="9999dd" border="1" width="300px">
<!--
Java脚本,这些脚本会对HTML的标签产生作用 -->
<%
for(int i = 0 ; i < 10 ;
i++)
{
%>
<!-- 上面的循环将控制<tr>标签循环
-->
<tr>
<td>循环值:</td>
<td><%=i%></td>
</tr>
<%
}
%>
<table>
4、JSP的三个编译指令:
4.1、page指令:
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!-- 指定info信息 -->
<%@ page info="this is a
jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>测试page指令的info属性</TITLE>
</HEAD>
<BODY>
<!--
输出info信息
-->
<%=getServletInfo()%>
<table>
</BODY>
</HTML>
4.2、include指令:
<!-- 使用include编译指定导入页面 -->
<%@include file="scriptlet.jsp"%>
4.3、taglib指令:
5、JSP的7个动作指令:
5.1、forward指令:
<jsp:forward page="forward-result.jsp">
<jsp:param
name="age" value="29"/>
</jsp:forward>
5.2、include指令:
<jsp:include page="forward-result.jsp" >
<jsp:param
name="age" value="32"/>
</jsp:include>
5.3、useBean、setProperty、getProperty指令:
<!-- 创建lee.Person的实例,该实例的实例名为p1 -->
<jsp:useBean id="p1"
class="lee.Person" scope="page"/>
<!-- 设置p1的name属性值
-->
<jsp:setProperty name="p1" property="name"
value="wawa"/>
<!-- 设置p1的age属性值 -->
<jsp:setProperty name="p1"
property="age" value="23"/>
<!-- 输出p1的name属性值
-->
<jsp:getProperty name="p1"
property="name"/><br>
<!-- 输出p1的age属性值
-->
<jsp:getProperty name="p1"
property="age"/>
${pageScope.p1.age}
5.4、plugin指令:
<!-- 使用Applet -->
<jsp:plugin type="applet"
code="Hello.class">
<jsp:params>
<jsp:param
name="hello" value="Java世界"/>
</jsp:params>
<jsp:fallback>
<p>不能下载jre插件</p>
</jsp:fallback>
</jsp:plugin>
5.5、param指令:与include、forward、plugin指令一起使用。
6、JSP的9个内置对象:
6.1、application对象:对整个web应用都有效
<!-- 直接输出application 变量值
-->
<%=application.getAttribute("counter")%>
6.2、config对象:代表当前JSP的配置信息
<!-- 直接输出config的getServletName的值
-->
<%=config.getServletName()%>
在web.xml中增加如下配置片段,可以将JSP页面配置在web中:
<servlet>
<!-- 指定Servlet名字
-->
<servlet-name>config</servlet-name>
<!--
指定将哪个JSP页面配置成Servlet
-->
<jsp-file>/configTest2.jsp</jsp-file>
<!--
配置名为name的参数,值为yeeku
-->
<init-param>
<param-name>name</param-name>
<param-value>yeeku</param-value>
</init-param>
<!--
配置名为age的参数,值为30
-->
<init-param>
<param-name>age</param-name>
<param-value>30</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!--
指定将config Servlet配置到/config
URL-->
<servlet-name>config</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>
configTest2:
<!-- 输出该JSP名为name的配置参数
-->
name配置参数的值:<%=config.getInitParameter("name")%><br/>
<!--
输出该JSP名为age的配置参数
-->
age配置参数的值:<%=config.getInitParameter("age")%>
6.3、exception对象:
<!-- 通过errorPage属性指定异常处理页面 -->
<%@ page contentType="text/html;
charset=gb2312"
language="java"
errorPage="error.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>JSP脚本的异常机制</TITLE>
</HEAD>
<BODY>
<%
int
a = 6;
int c = a / 0;
%>
</BODY>
</HTML>
error.jsp:
<!-- 通过isErrorPage属性本页面是异常处理页面 -->
<%@ page
contentType="text/html; charset=gb2312"
language="java"
isErrorPage="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>异常处理页面</TITLE>
</HEAD>
<BODY>
异常类型是:<%=exception.getClass()%><br/>
异常信息是:<%=exception.getMessage()%><br/>
</BODY>
</HTML>
6.4、out对象:一个页面的输出流
6.5、pageContext对象:代表页面上下文,可以访问JSP之间的共享数据
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>pageContext测试</TITLE>
</HEAD>
<BODY>
<%
//使用pageContext设置属性,该属性默认在page范围内
pageContext.setAttribute("page","hello");
//使用request设置属性,该属性默认在request范围内
request.setAttribute("request","hello");
//使用pageContext将属性设置在request范围中
pageContext.setAttribute("request2","hello"
,
pageContext.REQUEST_SCOPE);
//使用session将属性设置在session范围中
session.setAttribute("session","hello");
//使用pageContext将属性设置在session范围中
pageContext.setAttribute("session2","hello"
,
pageContext.SESSION_SCOPE);
//使用application将属性设置在application范围中
application.setAttribute("app","hello");
//使用pageContext将属性设置在application范围中
pageContext.setAttribute("app2","hello"
,
pageContext.APPLICATION_SCOPE);
//下面获取各属性所在的范围:
out.println("page变量所在范围:"
+
pageContext.getAttributesScope("page") +
"<br>");
out.println("request变量所在范围:"
+
pageContext.getAttributesScope("request") +
"<br>");
out.println("request2变量所在范围:"+
pageContext.getAttributesScope("request2")
+ "<br>");
out.println("session变量所在范围:"
+
pageContext.getAttributesScope("session") +
"<br>");
out.println("session2变量所在范围:"
+
pageContext.getAttributesScope("session2") +
"<br>");
out.println("app变量所在范围:"
+
pageContext.getAttributesScope("app") +
"<br>");
out.println("app2变量所在范围:" +
pageContext.getAttributesScope("app2") +
"<br>");
%>
</BODY>
</HTML>
6.6、request对象:封装一次用户请求。
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>获取请求参数</TITLE>
</HEAD>
<BODY>
<%
//设置解码方式,对于简体中文,使用gb2312解码
request.setCharacterEncoding("gb2312");
//下面依次获取表单域的值
String
name = request.getParameter("name");
String gender =
request.getParameter("gender");
//如果某个请求参数有多个值,将使用该方法获取多个值
String[] color
= request.getParameterValues("color");
String national =
request.getParameter("country");
%>
<!-- 下面依次输出表单域的值
-->
您的名字:<%=name%><hr>
您的性别:<%=gender%><hr>
<!--
输出复选框获取的数组值 -->
您喜欢的颜色:<%for(String c : color) {out.println(c + "
");}%><hr>
您来自的国家:<%=national%><hr>
</BODY>
</HTML>
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>获取GET请求参数</TITLE>
</HEAD>
<BODY>
<%
//获取name请求参数的值
String
name = request.getParameter("name");
//获取gender请求参数的值
String gender =
request.getParameter("gender");
%>
<!-- 输出name变量值
-->
您的名字:<%=name%><hr>
<!-- 输出gender变量值
-->
您的性别:<%=gender%><hr>
</BODY>
</HTML>
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>获取包含非西欧字符的GET请求参数</TITLE>
</HEAD>
<BODY>
<%
//获取请求里包含的查询字符串
String
rawQueryStr = request.getQueryString();
out.println("原始查询字符串为:" + rawQueryStr
+ "<hr/>");
//使用URLDecoder解码字符串
String queryStr =
java.net.URLDecoder.decode(
rawQueryStr ,
"gb2312");
out.println("解码后的查询字符串为:" + queryStr +
"<hr/>");
//以&符号分解查询字符串
String[] paramPairs =
queryStr.split("&");
for(String paramPair :
paramPairs)
{
out.println("每个请求参数名、值对为:" + paramPair +
"<br/>");
//以=来分解请求参数名和值
String[] nameValue =
paramPair.split("=");
out.println(nameValue[0] + "参数的值是:" +
nameValue[1]+
"<hr/>");
}
%>
</BODY>
</HTML>
6.7、response对象:代表服务器对客户端的响应。
<%@ page language="java"
%>
<%
//生成页面响应
out.println("====");
//重定向到forward-result.jsp页面
response.sendRedirect("redirect-result.jsp");
%>
<%@ page
import="java.awt.image.*,javax.imageio.*,java.io.*,java.awt.*"%>
<%
//创建BufferedImage对象
BufferedImage
image = new BufferedImage(340 ,
160,
BufferedImage.TYPE_INT_RGB);
//以Image对象获取Graphics对象
Graphics g =
image.getGraphics();
//使用Graphics画图,所画的图像将会出现在image对象中
g.fillRect(0,0,400,400);
//设置颜色:红
g.setColor(new
Color(255,0,0));
//画出一段弧
g.fillArc(20, 20, 100,100, 30,
120);
//设置颜色:绿
g.setColor(new Color(0 , 255,
0));
//画出一段弧
g.fillArc(20, 20, 100,100, 150,
120);
//设置颜色:蓝
g.setColor(new Color(0 , 0,
255));
//画出一段弧
g.fillArc(20, 20, 100,100, 270,
120);
//设置颜色:黑
g.setColor(new Color(0,0,0));
g.setFont(new Font("Arial
Black", Font.PLAIN, 16));
//画出三个字符串
g.drawString("red:climb" , 200 ,
60);
g.drawString("green:swim" , 200 , 100);
g.drawString("blue:jump" ,
200 , 140);
g.dispose();
//将图像输出到页面的响应
ImageIO.write(image , "bmp" ,
response.getOutputStream());
%>
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>增加Cookie</TITLE>
</HEAD>
<BODY>
<%
//获取请求参数
String
name = request.getParameter("name");
//以获取到的请求参数为值,创建一个Cookie对象
Cookie c =
new Cookie("username" , name);
//设置Cookie对象的生存期限
c.setMaxAge(24 *
3600);
//向客户端增加Cookie对象
response.addCookie(c);
%>
</BODY>
</HTML>
6.8、session对象:
<%@ page contentType="text/html; charset=gb2312" language="java"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>选择物品购买</TITLE>
</HEAD>
<BODY>
<FORM
METHOD=POST ACTION="processBuy.jsp">
书籍:<INPUT TYPE="checkbox"
NAME="item" value="book"><br>
电脑:<INPUT TYPE="checkbox"
NAME="item" value="computer"><br>
汽车:<INPUT TYPE="checkbox"
NAME="item" value="car"><br>
<INPUT TYPE="submit"
value="购买">
</FORM>
</BODY>
</HTML>
<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.
util.*"%>
<%
//取出session范围的itemMap属性
Map<String,Integer>
itemMap =
(Map<String,Integer>)session
.getAttribute("itemMap");
//如果Map对象为空,则初始化Map对象
if
(itemMap == null)
{
itemMap = new
HashMap<String,Integer>();
itemMap.put("书籍" ,
0);
itemMap.put("电脑" , 0);
itemMap.put("汽车" ,
0);
}
//获取上个页面的请求参数
String[] buys =
request.getParameterValues("item");
//遍历数组的各元素
for (String item :
buys)
{
//如果item为book,表示选择购买书籍
if(item.equals("book"))
{
int
num1 =
itemMap.get("书籍").intValue();
//将书籍key对应的数量加1
itemMap.put("书籍"
, num1 + 1);
}
//如果item为computer,表示选择购买电脑
else if
(item.equals("computer"))
{
int num2 =
itemMap.get("电脑").intValue();
//将电脑key对应的数量加1
itemMap.put("电脑"
, num2 + 1);
}
//如果item为car,表示选择购买汽车
else if
(item.equals("car"))
{
int num3 =
itemMap.get("汽车").intValue();
//将汽车key对应的数量加1
itemMap.put("汽车"
, num3 +
1);
}
}
//将itemMap对象放到设置成session范围的itemMap属性
session.setAttribute("itemMap"
, itemMap);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<TITLE>购买的物品列表</TITLE>
</HEAD>
<BODY>
您所购买的物品:<br>
书籍:<%=itemMap.get("书籍")%>本<br>
电脑:<%=itemMap.get("电脑")%>台<br>
汽车:<%=itemMap.get("汽车")%>辆<p>
<a
href="shop.jsp">再次购买</a>
</BODY>
</HTML>