JSP内置对象

一、内置对象简介

  1. 普通对象的使用,都是要遵循先创建后使用的规则。所谓的内置对象指的是JSP为了方便用户操作,已经为用户创建好的对象,用户可以直接进行使用,而不用考虑创建问题。

  2. JSP为用户提供了9个内置对象,每个内置对象都分别封装了对应的方法和属性,用户直接进行使用即可。这9个内置对象分别为:request(请求对象)、response(响应对象)、session(会话对象)、application(应用程序对象)、out(输出对象)、page(页面对象)、config(配置对象)、exception(异常对象)、pageContext(页面上下文对象)。

  3. 客户端和服务器进行交互的一般过程为:客户端向服务器端发送请求,服务器端接收这些请求,并且调用相应的模型进行处理,处理完成后做出响应。


    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>

运行结果:JSP内置对象

  • 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>

运行结果如下:JSP内置对象

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>

运行结果如下所示:JSP内置对象
JSP内置对象

上一篇:杭电dp题集,附链接还有解题报告!!!!!


下一篇:vuex使用例子