一、内置对象简介
-
普通对象的使用,都是要遵循先创建后使用的规则。所谓的内置对象指的是JSP为了方便用户操作,已经为用户创建好的对象,用户可以直接进行使用,而不用考虑创建问题。
-
JSP为用户提供了9个内置对象,每个内置对象都分别封装了对应的方法和属性,用户直接进行使用即可。这9个内置对象分别为:request(请求对象)、response(响应对象)、session(会话对象)、application(应用程序对象)、out(输出对象)、page(页面对象)、config(配置对象)、exception(异常对象)、pageContext(页面上下文对象)。
-
客户端和服务器进行交互的一般过程为:客户端向服务器端发送请求,服务器端接收这些请求,并且调用相应的模型进行处理,处理完成后做出响应。
out对象:
- 向客户端输出信息。输出的方法是:print()和println(),其中println()方法在输出完毕后,会结束当前行。
out.print("第一个jsp页面");
- out对象具有缓存功能。
request对象:
-
前台向后台发送数据常用的请求方法有两种:get、post(提交的信息在地址栏上不可见)
-
接收请求参数:
1.getParameter(String name)方法:(其中name与name表单组件的属性一致,该方法返回值是String)
String uname=request.getParameter("uname");
2.getParameterValues(String name)方法:(其中name与name表单组件的属性一致,该方法返回值是String[])
String uname[]=request.getParameterValues("uname");
例如(1):学生登录页面
login.jsp(表单页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>发送请求</title>
</head>
<body>
<form action="dologin.jsp" method="get" name="login"> <!--表单组件-->
用户名:<input type="text" name="name"/><br/><br/>
密码:<input type="password" name="password"/><br/><br/>
个人爱好:看书<input type="checkbox" name="habit" value="看书"/> <!--此项设为多选框-->
打羽毛球<input type="checkbox" name="habit" value="打羽毛球"/>
滑板<input type="checkbox" name="habit" value="滑板"/>
<br/><br/>
<input type="submit" value="登录"/><br/>
</form>
</body>
</html>
dologin.jsp(接收表单组件页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>接收请求</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8"); /* 指定每一个请求的代码,在调用getParameter()之前进行设定,可以解决中文乱码问题 */
String uname=request.getParameter("name"); /* 获取页面提交的数据 */
String upassword=request.getParameter("password");
String[] uhabit=request.getParameterValues("habit");/* 获取页面表单组件对应的多个值时用户的请求数据 */
if("".equals(upassword)){
response.sendRedirect("error.jsp");
}
%>
<h2>提交的信息为:</h2>
<p>你的用户名是:<%=uname %></p>
<p>你的密码是:<%=upassword %></p>
<p>你的个人爱好是:
<% for(int i=0;i<uhabit.length;i++) /* 遍历循环数组 */
{
out.print(uhabit[i]+"、");
}
%>
</p>
</body>
</html>
error.jsp(错误页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>错误页面</title>
</head>
<body>
请输入密码!<a href="login.jsp">跳转登录页面</a>
</body>
</html>
运行结果:
-
resquest属性管理:(此作用域是在当前作用域有效,或者在请求转发的页面有效)
setAttribute(String key,Object value)//以键值对的形式设置属性的名称及属性的值
getAttribute(String key)//函数的作用是根据属性的键来获得属性的值
例如:
login-2.jsp(使用setAttribute方法设置键值对)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>send</title>
</head>
<body>
<%
request.setAttribute("name","Tom");
request.setAttribute("password","1314");
%>
<jsp:forward page="dologin-2.jsp"/>
<a href="dologin-2.jsp">跳转</a>
</body>
</html>
dologin-2.jsp(使用getAttribute方法获取键对应的值)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>receive</title>
</head>
<body>
<% String uname=(String)request.getAttribute("name");
String upassword=(String)request.getAttribute("password");
out.println(uname);
out.println(upassword);
%>
</body>
</html>
运行结果如下:
response对象:
-
实现重定向页面:(使用sendRedirect()方法将网页重定向到另一个页面)
response.sendRedirect(String path)
如上述例如(1)所示
session对象:
-
在客户端与服务器端通信交互中,扮演着数据搬运工的角色,能够实现不同页面之间的数据共享。
-
session对象的生存时间是和浏览器关闭与否密切相关,只要浏览器不关闭,session对象就一直存在。
-
一般默认是30分钟为刷新时间,(可在配置文件conf->web.xml文件中查找session即可看到默认的刷新时间)。
application对象:
-
保存所有程序中的共有数据,只要没有关闭服务器,application对象将一直存在。
-
application对象类似于系统的“全局变量”,用于实现用户之间的数据共享。
-
application对象所提供的函数中最常用的是:
void removeAttribute(String name) 从ServletContext的对象中去掉指定名称的属性
void setAttribute(String name,Object object) 使用指定名称和指定对象在ServletContext的对象中进行关联
Object gerAttribute(String name) 从ServletContext的对象中获取一个指定对象
例如:学生注册页面
1.先创建一个JavaBean文件,如下所示:
package JavaBean;
public class Student {
private String name;
private int sno;
private String sclass;
private String sex;
private String[] habit;
public String getName() {//这些方法是点击空白处、右键source->generate getters and setters生成
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSclass() {
return sclass;
}
public void setSclass(String sclass) {
this.sclass = sclass;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getHabit() {
return habit;
}
public void setHabit(String[] habit) {
this.habit = habit;
}
}
2.创建一个jsp文件,用以编辑学生注册表单组件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生注册</title>
</head>
<body>
<h2>学生注册</h2>
<form action="studentindex.jsp" method="get" name="stuInfo">
学生姓名:<input type="text" name="name"/><br/><br/>
学号:<input type="text" name="sno"/><br/><br/>
班级:<select name="sclass"><!-- 此项设置为下拉框 -->
<option value="计本1801班">计本1801班</option>
<option value="计本1802班">计本1802班</option>
<option value="计本1803班">计本1803班</option>
</select><br/><br/>
性别:
男<input type="radio" name="sex" value="男"/><!-- 此项设置为单选框 -->
女<input type="radio" name="sex" value="女"/><br/><br/>
兴趣爱好:
看书<input type="checkbox" name="habit" value="看书"/><!-- 此项设置为多选框 -->
打球<input type="checkbox" name="habit" value="打球"/><br/><br/>
<input type="submit" value="注册"/><br/>
</form>
</body>
</html>
3.创建一个获取学生注册表单的jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="JavaBean.Student,java.util.ArrayList"%><!--需要导两个包,一个是学生类,一个是集合-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册成功</title>
</head>
<body>
<h2>注册成功!</h2>
<%
//获取表单提交信息
String name=request.getParameter("name");
int sno=Integer.parseInt(request.getParameter("sno"));//整型转换,若为double,则用Double.parseDouble转换
String sclass=request.getParameter("sclass");
String sex=request.getParameter("sex");
String[] habit=request.getParameterValues("habit");//兴趣爱好有多个值,所以需要用数组请求
//创建一个学生对象,将表单提交的学生信息放在学生对象里
Student student=new Student();
student.setName(name);
student.setSno(sno);
student.setSclass(sclass);
student.setSex(sex);
student.setHabit(habit);
//学生集合类
//ArrayList<Student> studentlist=new ArrayList<Student>();每刷新一次每new一次
ArrayList<Student> studentlist=null;
if(application.getAttribute("studentlist")!=null){
studentlist=(ArrayList<Student>)application.getAttribute("studentlist");//如果“注册学生信息表”不为空,则获取提交的学生的信息集合
}
else{
studentlist=new ArrayList<Student>();//如果“注册学生信息表”为空,则学生类集合进行初始化
}
studentlist.add(student);//学生类的集合的add方法
application.setAttribute("studentlist",studentlist);//用“键值对”的形式设置属性名称和属性的值
%>
<h2>学生注册信息表如下:</h2>
<table>
<tr>
<th>姓名</th>
<th>学号</th>
<th>性别</th>
<th>班级</th>
<th>兴趣爱好</th>
</tr>
<% //遍历学生类集合
for(int i=0;i<studentlist.size();i++){
Student stu=studentlist.get(i);//由学生类来接收循环遍历得到的值
%>
<tr>
<td><%=stu.getName() %></td>
<td><%=stu.getSno() %></td>
<td><%=stu.getSex() %></td>
<td><%=stu.getSclass() %></td>
<td><%
if(stu.getHabit()!=null){
String[] h=stu.getHabit();
for(int j=0;j<h.length;j++){
out.print(h[j]);
}
}
%></td>
</tr>
<%
}
%>
</table>
<a href="studentlogin.jsp">返回继续添加学生</a>
</body>
</html>
运行结果如下所示: