目录
SP语法
“<%!”和“%>”之间声明的变量在整个JSP页面内都有效,与“<%!”、“%>” 标记符在JSP页面中所在的书写位置无关。JSP引擎将JSP页面转译成Java 文件时,将“<%!”、“%>” 标记符之间声明的变量作为类的成员变量,这些变量占有的内存空间直到JSP引擎关闭才释放。
在“<%”和“%>”之间插入Java程序片。一个JSP页面可以有许多程序片,这些程序片将被JSP引擎按顺序执行。
程序片中声明的变量称为JSP页面的局部变量 。
Java程序片中声明的局部变量在其后继的所有Java程序片以及表达式部分内都有效。
多个客户请求一个JSP页面时,Java程序片将被执行多次,分别在不同的线程中执行 。
JSP 指令标记
page 指令标记
page 指令标记可以指定如下属性的值contentType、import、language、session、buffer、auotFlush 、isThreadSafe
contentType 属性值确定JSP页面响应的类型MIME和JSP页面字符的编码。
例如:用户的浏览器启用HTML解析器来解析执行所接收到的信息
<%@ page contentType="text/html;charset=GB2312" %>
如果不使用page指令为contentType指定,默认值是 "text/html ; charset=ISO-8859-1“
include 指令标记
<%@ include file= "文件的URL " %>
静态插入一个文件
JSP 动作标记
include 动作标记
<jsp:include page= "文件的URL"/>
或 <jsp:include page= "文件的URL">
param子标记
</jsp:include>
param子动作标记
不能独立使用,需作为jsp:include、jsp:forward、jsp:plugin标记的子标记来使用。
<jsp:param name= "名字" value= "值">
相应获取数据:String s=request.getParameter("num");
forward动作标记
<jsp:forward page="要转向的页面" />
或 <jsp:forward page="要转向的页面" >
param子标记
</jsp:forward> 该指令的作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。
useBean 动作标记
---杂记:
Jsp页面组成(5)
jsp是由指令元素+脚本元素+html模板组成的
<%@ %>这种是jsp指令
<% %>这种是jsp脚本,即在里面写java代码
JSP页面被第一次请求执行时,引擎转译成Java文件,编译成字节码文件。字节码文件响应请求。每个用户一个线程
Out.print或println
导包:ctrl+shift+M
DateFormat 类MM-dd HH:mm:ss
声明全局变量:<%! %>
在webContent下建立image文件夹,路径为“image/**”
得到info的值:(this.)getServletInfo
Include指令嵌入文件:静态<% @ include file=”路径”%> <bgsound src=””
窗口、引用、workspace和Jsp file的encoding改成utf-8
静态包含的含义:把一个文件中所有的代码都包含进
显示server:
在左下方图标打开
显示浏览器:
上方图标
实验
实验2_1 JSP页面的基本结构
编写两个JSP 页面,名字分别为inputName.jsp和people.jsp。
-
inputName.jsp的具体要求
该页面有一个表单,用户通过该表单输入自己的姓名并提交给people.jsp页面。
-
people.jsp的具体要求
(1)JSP页面有名字为personList,类型是StringBuffer以及名字是count,类型为int的成员变量。
(2)JSP页面有public void judge ()方法,该方法负责创建personList对象,当count的值是0时,judge ()方法创建personList对象。
(3)JSP页面有public void addPerson(String p)的方法,该方法将参数p指定的字符串尾加到成员变量personList,同时将count作自增运算。
(4)JSP页面在程序片中获取inputName.jsp页面提交的姓名,然后调用judge()创建personList对象,调用addPerson方法将用户的姓名尾加到成员变量personList。
(5)如果inputName.jsp页面没有提交姓名,或姓名含有的字符个数大于10,就使用<jsp:forward page="要转向的页面" />标记将用户转到inputName.jsp页面。
(6)通过Java表达式输出personList和count的值。
<!-- input.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'input.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<form action="people.jsp" method="get">
<input type="text" name="name">
<input type="submit" value="提交">
</form>
</body>
</html>
<!-- people.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'people.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<%!
StringBuffer personList;
int count;
public void judge(){
personList=new StringBuffer();
}
public void addPerson(String p){
if(count==0){
judge();
personList.append(p);
}else{
personList.append(","+p);
}
count++;
}
%>
<%
String name=request.getParameter("name");
if(name==null||name.length()==0||name.length()>10){
%><jsp:forward page="input.jsp"/><%
}
addPerson(name);
out.print(count+"<BR>");
out.print(personList);
%>
</body>
</html>
实验2_2 JSP指令标记
实验要求
编写一个JSP 页面includeHello.jsp,使用include指令在JSP页面中静态插入hello.txt的内容。
includeHello.jsp使用page指令设置contentType属性的值为"text/plain",使用include指令静态插入hello.txt文件。
<!-- includeHello.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="gb2312" contentType="text/plain"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'includeHello.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
<%@ include file="hello.txt" %>
</body>
</html>
实验2_3 JSP动作标记
include动作标记:
<jsp:include page="文件的URL"/>
forward动作标记:
<jsp:forward page="要转向的页面" />
3.实验要求
编写4个JSP 页面:one.jsp、two.jsp、three.jsp和error.jsp。one.jsp、two.jsp和three.jsp页面都含有一个导航条,以便让用户方便地单击超链接访问这三个页面。要求这三个页面通过使用include动作标记动态加载导航条文件head.txt。导航条文件
head.txt
<%@ page contentType="text/html;charset=gb2312" %>
<table cellSpacing="1" cellPadding="1" width="60%" align="center" border="0" >
<tr valign="bottom">
<td><A href="one.jsp"><font size=3>one.jsp页面</font></A></td>
<td><A href="two.jsp"><font size=3>two.jsp页面</font></A></td>
<td><A href="three.jsp"><font size=3>three.jsp页面</font></A></td>
</tr>
</table>
- one.jsp的具体要求
要求one.jsp页面有一个表单,用户使用该表单可以输入一个1~100之间的整数,并提交给本页面;如果输入的整数在50至100之间(不包括50)就转向three.jsp,如果在1至50之间(包括50)就转向two.jsp;如果输入不符合要求的整数,比如120,就转向error.jsp。要求forward标记在实现页面转向时,使用param子标记将整数传递到转向的two.jsp或three.jsp页面,将有关输入错误的信息传递到转向的error.jsp页面。
2.two.jsp、three.jsp和error.jsp的具体要求
要求two.jsp和three.jsp能输出one.jsp传递过来的值,并显示一幅图像,该图像的宽和高刚好是one.jsp页面传递过来的值。error页面能显示有关错误信息和一幅警告出错的图像。
Debug:
<%=%>
表单中提交的和param提交,获取都是request.get Parameter(“name”);
<img src="图片路径" width="150">图片最好放在webRoot目录下,并且不删除
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath%>"> |
<!-- one.jsp -->
<%@page import="org.apache.catalina.connector.Request"%>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%@include file="head.txt" %>
<form action="" method="get">
<input type="text" name="num">
<input type="submit" value="提交">
</form>
<%
String s=request.getParameter("num");
if(s!=null&&s.length()!=0){
int num=Integer.parseInt(s);
%>
<jsp:forward page="two.jsp">
<jsp:param value="<%=num%>" name="num"/>
</jsp:forward>
<%
}else{
out.print(s);
}
%>
</body>
</html>
<!-- two.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'two.jsp' starting page</title>
</head>
<body>
<%@include file="head.txt" %>
<%
String s=request.getParameter("num");
int num=1;
if(s!=null&&s.length()!=0){
num=Integer.parseInt(s);
}
out.print(num);
%>
<img alt="图像" src="dad.jpg" width="<%=num%>" height="<%=num%>">
</body>
</html>