JSP Learning

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>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。