JSP是一种动态网页技术标准,它是在静态网页HTML代码中加入Java程序片段(Scriptlet)和JSP标签(tag),构成JSP网页文件,其扩展名为“.jsp”。
JSP页面是将JSP代码放在“<%”与“%>”的标签中,然后嵌入到HTML代码中而形成。在“<%”与“%>”标签中定义JSP元素的的行为。
1》JSP变量、方法的声明
语法格式:<%! 声明变量、方法和类 %>
2》显示JSP表达式的值
语法格式:<%=表达式%>
3》JSP代码块
语法格式:<% 符合java语法的代码块 %>
4》JSP注释
在JSP程序中,为了增加JSP程序的可读性,给出了注释元素。
语法格式1:<%-- 要添加的文本注释 --%>
语法格式2:
语法格式3:<%//要添加的文本注释%> 或<%/*要添加的文本注释*/%>
JSP指令标记被服务器解释并被执行。
JSP 指令的语法格式: <%@ 指令名称 属性1="属性值1" 属性2="属性值2" … 属性n="属性值n"%>
1》page指令
Page指令用来定义JSP页面中的全局属性,它描述了与页面相关的一些信息
属性 |
说明 |
设置值示例 |
language |
指定用到的脚本语言,默认是Java |
<%@page language="java"%> |
import |
用于导入java包或java类 |
<%@page import="Java.util.Date"%> |
pageEncoding |
指定页面所用编码,默认与contentType值相同 |
UTF-8 |
session |
指定该页面是否参与到HTTP会话中 |
true 或 false |
errorPage |
设置当页面出错后要跳转到的页面 |
/error/jsp-error.jsp |
contentType |
设计响应jsp页面的MIME类型和字符编码 |
text/html;charset=gbk |
isErrorPage |
设置是否是一个错误处理页面 |
true 或 false |
isELIgnord |
设置是否忽略正则表达式 |
true 或 false |
2》include指令
include指令称为文件加载指令,可以将其他的文件插入JSP网页,被插入的文件必须保证插入后形成的新文件符合JSP页面的语法规则;
include指令语法格式: <%@ include file="filename"%> 【 include指令只有一个file属性,filename指被包含的文件的名称(相对路径),被插入的文件必须与当前JSP页面在同一Web服务目录下】
JSP动作元素是用来控制JSP引擎的行为,JSP标准动作元素均以“jsp”为前缀。
1》
语法格式:
功能:
当前JSP页面动态包含一个文件,即将当前JSP页面、被包含的文件各自独立编译为字节码文件。
当执行到该动作标签处,才加载执行被包含文件的字节码。
2》
用于停止当前页面的执行,转向另一个页面。
语法格式:
在JSP中为了便于数据信息的保存、传递、获取等操作,专门设置了9个内置对象。
对象名称 |
所 属 类 型 |
有效范围 |
说明 |
application |
javax.servlet.ServletContext |
application |
应用程序上下文,JSP页面以及在同一应用程序中的任何Web组件共享信息 |
config |
javax.servlet.ServletConfig |
page |
允许将初始化数据传递给JSP页面 |
exception |
java.lang.Throwable |
page |
该对象含有只能由指定的JSP“错误处理页面”访问的异常数据 |
out |
javax.servlet.jsp.JspWriter |
page |
提供对输出流的访问 |
page |
javax.servlet.jsp.HttpJspPage |
page |
代表JSP页面对应的Servlet类实例 |
pageContext |
javax.servlet.jsp.PageContext |
page |
JSP页面本身的上下文 |
request |
javax.servlet.http.HttpServletRequest |
request |
提供对请求数据的访问,同时还提供用于加入特定请求数据的上下文 |
response |
javax.servlet.http.HttpServletResponse |
page |
该对象用来向客户端输入数据 |
session |
javax.servlet.http.HttpSession |
session |
用来保存在服务器与一个客户端之间需要保存的数据,当客户端关闭网站的所有网页时,session变量会自动消失 |
1》request对象的常用方法
request对象的各种方法主要用来处理客户端浏览器提交的请求信息,以便做出相应的处理。
方法 |
说明 |
setAttribute(String name, Object obj) |
设置request中的属性及其属性值 |
getAttribute(String name) |
返回name指定的属性值,若不存在指定的属性,就返回null。 |
removeAttribute(String name) |
删除请求中的一个属性 |
getParameter(String name) |
获得客户端传送给服务器端的参数值 |
getParameterNames() |
获得客户端传送给服务器端的所有参数名字(Enumeration类的实例) |
getParameterValues(String name) |
获得指定参数的所有值 |
getCookies() |
返回客户端的所有Cookie对象,结果是一个Cookie数组 |
getCharacterEncoding() |
返回请求中的字符编码方式 |
getRequestURI() |
获取发出请求字符串的客户端地址 |
getRemoteAddr() |
获取客户端IP地址 |
getRemoteHost() |
获取客户端名字 |
getSession([Boolean create]) |
返回和请求相关的session。参数若为true,若没有session,新建session |
getServerName() |
用于获取服务器的名字 |
getServletPath() |
用于获取客户端所请求的脚本文件的文件路径。 |
getServerPort() |
用于获取服务器的端口号 |
2》response 对象的常用方法
response对象提供了页面重定向(sendRedirect)方法、设置状态行(setStatus)方法和设置文本类型(setContentType)方法等
方法 |
说明 |
SendRedirect(String url) |
使用指定的重定向位置url向客户端发送重定向响应 |
setContentType(String type) |
为响应设置内容类型,其参数值可以为text/html,text/plain,application/x_msexcel或application/msword |
setContentLength(int len) |
为响应设置内容长度 |
setLocale(java.util.Locale loc) |
为响应设置地区信息 |
session对象其主要作用是存储、获取用户会话信息
方法 |
说明 |
Object getAttribute(String attriname) |
获取指定属性的属性值,若属性不存在,返回null |
void setAttribute(String name,Object value) |
设定指定名字的属性值,并且存储在session中 |
void removeAttribute(String attriname) |
删除指定的属性(包含属性名、属性值) |
Enumeration getAttributeNames() |
返回session对象中存储的每一个属性对象 |
long getCreationTime() |
返回session对象被创建时间,单位为毫秒 |
long getLastAccessedTime() |
返回session最后发送请求的时间,单位为毫秒 |
String getId() |
返回Session对象在服务器端的编号 |
long setMaxInactiveInterval() |
返回session对象的生存时间,单位为秒 |
boolean isNew() |
判断目前session是否为新的Session |
void invalidate() |
销毁session对象,使得与其绑定的对象都无效 |
设计一个网上答题及其自动评测系统。
本案例设计一个简单的网上答题与评测,该程序包括两部分,
首先是试题页面的设计及其解答的提交,
其次是,当提交解答后,系统自动评阅并给出评阅结果。
该案例的设计,需要设计两个JSP页面:
一个是提交信息页面,
另一个是获取提交信息并进行处理显示结果页面。
其设计关键是如下两点:
(1)对于互斥的单选框、只允许的单选的列表框,只传递一个参数。
(2)对于复选框、可多选列表框,需传递多个参数,通过数组保存并获取参数值。
代码:
(1)提交信息页面程序:ch02_5_input.jsp,《代码》。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
简单的网上试题自动测评——试题
(2)获取提交信息并进行处理页面:ch02_5_show.jsp,《代码》
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
简单的网上试题自动测评——测评
<% String s1 = request.getParameter("r1");
if (s1 != null) {
out.println("一、解答为:2+3=" + s1 + " ");
if (s1.equals("5")) out.println("正确!" + "
");
else out.println("错误!" + "
");
}else out.println("一、没有解答!");
out.println("---------------------------
");
String[] s21 = request.getParameterValues("c1");
if (s21 != null) {
out.println("二、解答为:偶数有:");
for (int i = 0; i < s21.length; ++i) {out.println(s21[i] + " ");}
if (s21.length == 2 && s21[0].equals("2") && s21[1].equals("4")){
out.println("正确!" + "
");
}else{
out.println("错误!" + "
");
}
}else{
out.println("二、没有解答!");
}
out.println("---------------------------
");
String[] s31 = request.getParameterValues("list1");
if (s31 != null) {
out.println("三、解答为:动态网页有:");
for (int i = 0; i < s31.length; ++i) {out.println(s31[i] + " ");}
if (s31.length == 3 && s31[0].equals("asp") && s31[1].equals("php")
&& s31[2].equals("jsp")){
out.println("正确!" + "
");
}else{
out.println("错误!" + "
");
}
} else out.println("三、没有解答!");
out.println("---------------------------
");
String s4 = request.getParameter("list5");
if (s4 != null) {
out.println("四、解答为:服务器端的组件是有:");
out.println(s4 + " ");
if (s4 != null && s4.equals("servlet")) out.println("正确!" + "
");
else out.println("错误!" + "
");
} else out.println("四、没有解答!");
out.println("---------------------------
");
String s5 = request.getParameter("text1");
if (s5 != null) {
out.println("五、解答为: ");
out.println(s5 + " ");
if (s5 != null && s5.equals("request"))
out.println("正确!" + "
");
else out.println("错误!" + "
");
} else out.println("五、没有解答!");
out.println("---------------------------
");
%>