JSP页面的基本构成
JSP页面主要由 指令标签、HTML语句、 注释、嵌入Java代码、JSP动作标签 等五个元素组成。
指令标签---通常位于文件的首位
嵌入Java代码---Java代码被包含在<%%>标签中
一、指令标签
指令标签不会产生任何内容输出到网页中,主要用于定义整个JSP页面的相关信息,如,使用的语言,导入的类包,指定错误处理页面等。
语法格式
<%@ 指令名称 属性名称="属性值"%>
page指令
常见属性
1. language属性---设置JSP页面使用的语言,目前仅支持Java语言,属性的默认值是Java
如<%@ page language="java"%>
2. extend属性---设置JSP页面继承的Java类,并不常用
3. import属性---设置JSP导入的类包
4. pageEncoding属性---定义JSP页面的编码格式,即指定文件编码
5. contentType属性---设置JSP页面的MIME类型和字符编码,浏览器据此显示网页内容
如<%@page contentType="text/html;charset=utf-8"%>
include指令
该指令用于文件包含,可以在JSP页面中包含另一个文件的内容
实例:
date.jsp文件
<%@page pageEncoding="GB18030"%>
<%@page import="java.util.Date"%>
<%
Date now=new Date();
String dateStr;
dateStr=String.format("%tY年%tm月%td日",now,now,now);
%>
<%=dateStr%>
index.jsp文件中
<%@page language="java" import="java.util.*"
contentType="text/html;charset=GB18030" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>
include指令演示
</title>
</head>
<body>
<!-- HTML注释信息 -->
当前日期是:
<%@include file='date.jsp' %>
<br>
</body>
</html>
taglib指令
用于加载用户自定义标签
<%@taglib prefix="" uri=""%>
prefix属性---设置加载自定义标签的前缀
uri---指定自定义标签的描述符文件位置
二、 嵌入Java代码
代码片段
语法格式
<%编写Java代码%>
声明
定义全局成员变量或方法
定义全局变量---<%! long startTime=System.nanoTime();%>
定义全局方法---<%!
int getMax(int a,int b){
int max=a>b ? a:b;
return max;
}
%>
JSP表达式
JSP表达式可以直接把Java的表达式结果输出到JSP页面中
<%= 表达式 %>
三、 注释
HTML注释---<!-- 注释文本 -->
JSP注释---<%--注释文本--%>
动态注释---<!-- <%注释文本%> -->
代码注释---//(单行注释) /* */ (多行注释)
四、 request对象
获取请求参数值
index.jsp文件中
<%@page pageEncoding="utf-8" %>
<body>
<a href="show.jsp?id=001">获取请求参数的值</a>
</body>
show.jsp文件中
<%@page pageEncoding="utf-8"%>
<body>
id参数的值为:<%=request.getParameter("id") %><br>
name参数的值为:<%=request.getParameter("name") %>
</body>
获取Form表单的信息
index.jsp文件中
<%@page pageEncoding="utf-8"%>
<form action="show.jsp" method="post">
<ul style="list-style: none; line-height: 30px">
<li>输入用户姓名:<input type="text" name="name" /><br></li>
<li>选择性别:
<input name="sex" type="radio" value="男">男
<input name="sex" type="radio" value="女">女
</li>
<li>选择密码提示问题: <select name="question">
<option value="母亲生日">母亲生日</option>
<option value="宠物名称">宠物名称</option>
<option value="电脑配置">电脑配置</option>
</select>
</li>
<li>请输入问题答案:<input type="text" name="key"></li>
<li>请选择个人爱好:
<div style="width: 400px">
<input name="like" type="checkbox" value="唱歌跳舞">唱歌跳舞 <input
name="like" type="checkbox" value="上网冲浪">上网冲浪 <input
name="like" type="checkbox" value="户外登山">户外登山<br> <input
name="like" type="checkbox" value="体育运动">体育运动 <input
name="like" type="checkbox" value="读书看报">读书看报 <input
name="like" type="checkbox" value="欣赏电影">欣赏电影
</div>
</li>
<li><input type="submit" value="提交"></li>
</ul>
</form>
-----------------------------------------------
show.jsp文件中
<%@page pageEncoding="utf-8" import="java.lang.*" contentType="text/html; charset=utf-8"%>
<ul style="list-style: none; line-height: 30px">
<li>输入用户姓名: <%=new String(request.getParameter("name").getBytes("ISO8859_1"), "utf-8")%>
</li>
<li>选择性别: <%=new String(request.getParameter("sex").getBytes("ISO8859_1"), "utf-8")%>
</li>
<li>选择密码提示问题: <%=new String(request.getParameter("question").getBytes("ISO8859_1"), "utf-8")%>
</li>
<li>请输入问题答案: <%=new String(request.getParameter("name").getBytes("ISO8859_1"), "utf-8")%>
</li>
<li>请选择个人爱好: <%
String[] like = request.getParameterValues("like");
for (int i = 0; i < like.length; i++) {
%> <%=new String(like[i].getBytes("ISO8859_1"), "utf-8") + " "%>
<%
}
%>
</li>
</ul>
获取请求客户端信息

cookie管理
cookie是小段的文本信息,通过使用cookie可以标识用户身份、记录用户名及密码、跟踪重复用户。
首先创建index.jsp文件,在其中创建form表单,用于让用户输入信息,并且从request对象中获取cookie
判断其是否含有此服务器发送过的cookie,如果没有,则说明第一次访问本站;如果有,则将值读取出来,并赋值给相应的表单。
index.jsp文件中
<%@page pageEncoding="utf-8" language="java" contentType="text/html; charset=utf-8" import="java.util.*"%>
<%
String welcome="第一次访问";
String[] info=new String[]{"","",""};
Cookie[] cook=request.getCookies();
if(cook!=null){
for(int i=0;i<cook.length;i++){
if(cook[i].getName().equals("mrCookInfo")){
info=cook[i].getValue().split("#");
welcome=",欢迎回来!";
}
}
}
%>
<%=info[0]+welcome%>
<form action="show.jsp" method="post">
<ul style="line-height: 23">
<li>姓 名:<input name="name" type="text" value="<%=info[0]%>">
<li>出生日期:<input name="birthday" type="text" value="<%=info[1]%>">
<li>邮箱地址:<input name="mail" type="text" value="<%=info[2] %>">
<li><input type="submit" value="提交">
</ul>
</form>
show.jsp文件中
<%@page pageEncoding="utf-8" language="java" contentType="text/html; charset=utf-8" import="java.util.*"%>
<%
String name=request.getParameter("name");
String birthday =request.getParameter("birthday");
String mail=request.getParameter("mail");
Cookie myCook=new Cookie("mrCookInfo",name+"#"+birthday+"#"+mail);
out.print(name);
myCook.setMaxAge(60*60*24*365); //设置cookie有效期
response.addCookie(myCook);
%>
表单提交成功
<ul style="line-height: 24px">
<li>姓名:<%=name %>
<li>出生日期:<%=birthday %>
<li>电子邮箱:<%=mail %>
<li><a href="index.jap">返回</a>
</ul>
五、response对象
处理HTTP文件头
设置网页每五秒刷新一次---response.setHeader("refresh","5");
设置2秒后自动跳转至指定的页面---response.setHeader("refresh","2;URL=welcome.jsp");
设置相应类型---response.setContentType("text/html");
设置输出缓冲
通常情况下,服务器要输出到客户端的内容先写到一个输出缓冲区; 有三种情况,才会把缓冲区的内容写到客户端。
jsp页面的输出信息已经全部写入到缓冲区
缓冲区已满
在jsp页面中调用了flushbuffer()方法或者out对象的flush()方法
response.setBufferSize()-----设置缓冲区的大小
response.isCommitted()-----检测服务器端是否已经把数据写入客户端
六、session对象
session对象是由服务器自动创建的与用户请求相关的对象,用于保护用户的信息,跟踪用户的操作状态。
创建及获取session信息
index.jsp文件中
<%@page pageEncoding="utf-8" language="java" contentType="text/html; charset=utf-8" import="java.util.*"%>
<body>
<%
String sessionMessage="session练习";
//message为sessionMessage对象的关键字,相当于是一个别名
session.setAttribute("message", sessionMessage);//创建session对象
out.print("保存在session范围内的对象为:"+sessionMessage);
%>
</body>
default.jsp文件中
<%@page pageEncoding="utf-8" language="java" contentType="text/html; charset=utf-8" import="java.util.*"%>
<body>
<%
String message=(String)session.getAttribute("message");//获取session对象信息
out.print("保存在session范围内的值为:"+message);
%>
</body>
//但是我的电脑中只有两片代码放到同一个文件中session对象的值才相同,而在两个文件中session对象中
的值不同
从会话中移除指定的绑定对象
语法格式:
remove.Attribute("关键字");
例如: session.removeAttribute("message");
销毁session
如果调用了session对象的invalidate()方法后,再调用session对象的任何其他方法时,都将报错。
会话超时的管理
一般来说session对象的生命周期在20到30分钟,超出这个时间范围或者服务器强行制止,这个session就不能使用。
设置绘画生命周期的方法
以秒为单位设置session的有效时间---setMaxInactiveInterval()
session对象的应用
index.jsp文件中
//主要是构造网页表面
<%@page pageEncoding="utf-8" language="java"
contentType="text/html; charset=utf-8" import="java.util.*"%>
<body>
<form id="form1" action="session.jsp" name="form1" method="post">
<div align="center">
<table width="23%" border="0">
<tr>
<td width="36%"><div align="center">您的名字是:</div></td>
<td width="64%"><label><div align="center">
<input type="text" name="name">
</div></label></td>
</tr>
<tr>
<td colspan="2"><label><div align="center">
<input type="submit" value="提交">
</div></label></td>
</tr>
</table>
</div>
</form>
</body>
session.jsp文件中
//将上个网页用户输入的用户名保存在session对象中,并添加其他文本框
<%@ 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>Insert title here</title>
</head>
<body>
<%
String name=new String(request.getParameter("name").getBytes("ISO8859_1"),"utf-8");
session.setAttribute("name", name);
%>
<div align="center">
<form id="form1" name="form1" action="result.jsp" method="post">
<table width="28%" border="0">
<tr>
<td>您的名字是:</td>
<td><%=name %></td>
</tr>
<tr>
<td>您最喜欢去的地方是:</td>
<td>
<label>
<input type="text" name="adress">
</label>
</td>
</tr>
<tr>
<td colspan="2">
<label>
<div align="center">
<input type="submit" value="提交">
</div>
</label>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
result.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>Insert title here</title>
</head>
<body>
<%
String name=(String)session.getAttribute("name");
String solution=new String(request.getParameter("adress").getBytes("ISO8859_1"),"utf-8");
%>
<form id="form1" name="form1" method="post">
<table width="28%">
<tr>
<td colspan="2"><div align="center"><strong>显示答案</strong></div></td>
</tr>
<tr>
<td width="49%">
<div align="left">
您的名字是:
</div>
</td>
<td width="51%">
<label>
<div align="left">
<%=name %>
</div>
</label>
</td>
</tr>
<tr>
<td>
<label>
<div align="left">
您最喜欢去的地方是:
</div>
</label>
</td>
<td>
<div align="left">
<%=solution %>
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
七、application对象
application对象可将信息保存在服务器中,直到服务器关闭,生命周期比session对象长。