JSP内置对象

JSP中采用Java语言作为脚本编程语言,这样一来使系统具有了强大的对象处理能力,并且可以动态的创建Web页面的内容,但Java语法在使用一个对象之前都要先将这个对象进行实例化,比较繁琐,为了简化开发,JSP提供了一些内置对象,他们由系统容器实现和管理,在JSP中不需要实例化,可以直接使用。

在JSP中共预先定义了九个这样的对象,分别是request、response、session、application、out、pageContext、config、page和execption。

一、页面请求对象request

request中封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式和请求参数。

1、request的getParamer()方法可以获取指定参数的值,他的返回值类型是String类型,如果该值为空则返回一个null。

2、request的个体ParameterValues方法可用于返回复选框以及多选列表的值,他的返回值是一个String[]

例如:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'RequestDemo.jsp' starting page</title>
  </head>
  
<body>
	<form action="RequestTest.jsp" name="myAction" method="get">
		<table>
			<tr>
				<td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td><input type="text" name="password"></td>
			</tr>
			<tr>
				<td>
					<input type="checkbox" name="hobby" value="1001" />音乐 
					<input type="checkbox" name="hobby" value="1002" />美术
					<input type="checkbox" name="hobby" value="1003" />体育
				</td>
			</tr>
			<tr>
				<td><input type="submit" value="提交"></td>
			</tr>
		</table>
	</form>                                                                                                                 </body>
</html>

当提交该页面时,提交的数据将在RequestTest.jsp这个页面进行处理。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'RequestTest.jsp' starting page</title>

</head>

<body>
	<%
		out.print(request.getParameter("username"));
		out.print(request.getParameter("password"));
		String[] insterst = request.getParameterValues("hobby");
		for (int i = 0; i < insterst.length; i++)
			out.print(insterst[i]);
	%>
</body>
</html>

当通过request对象获取请求参数时,当参数是中文时,如果不进行处理,得到的参数将会产生乱码。

解决乱码问题需要设置请求和响应的编码方式。

设置请求编码方式:request.setCharacterEncoding("utf-8");

设置响应编码方式:response.setCharacterEncoding("utf-8");

对于表单请求中出现乱码的处理方式:

get请求出现乱码 new String(s.getBytes("iso-8859-1"),"utf-8");

通过配置tomcat\conf\server.xml文档

二、客户端响应对象response

response对象用于响应客户请求,向客户端发送消息,他封装了JSP产生的响应,并发送到客户端以响应客户端的请求。

response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址重定向到不同主机上,这时在客户端浏览器上将会得到跳转地址,并重新发送请求链接,用户可以通过浏览器的地址栏中看到跳转后的地址,进行重定向操作后,request中的属性全部作废,并且开始一个新的request。

语法格式如下:

response.sendRedirect(String path);

与重定向相似的还有一个转发,转发的语法:

request.getRequestDispatcher("url").forword(request,response);
转发与重定向的区别转发重定向
URL变化
客户端是否发出请求不会
是否携带请求
目标URL要求仅本WEB应用任意URL均可

 例如:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'RequestTest.jsp' starting page</title>
  </head>
  
  <body>
    <%
    	if(request.getParameter("username").equals("admin")){
    		request.setAttribute("mess", "登陆成功!");
    		response.sendRedirect("index.jsp");
    	}
    	else{
    		request.setAttribute("mess", "登陆失败");
    		request.getRequestDispatcher("RequestDemo.jsp").forward(request, response);
    	}
     %>
  </body>
</html>

三、Session会话对象

Session对象是由服务器自动创建的与用户请求相关的对象,服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。

Session中保存数据的语法:

public void setAttribute(String name,Object value)

name表示属性名,value表示属性值。

从session中获取数据的方法:

public Object getAttribute(String name);

注意:他的返回值类型是Object类型,在获取数据时注意使用强制类型转换。

例如:客户端在index.jsp页面填写表单后提交给台的demo.jsp,如果用户填入的用户名是admin,那么demo.jsp将客户端填写的用户名写入session对象中,并且重定向到login.jsp并且实现自动登录功能。

首先看index.jsp

<%@ page language="java" contentType ="text/html; charset=utf-8" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
    <form action="Demo.jsp" method = "post">
    	<table>
    		<tr>
    			<td>用户名:</td>
    			<td><input type = "text" name="username" /></td> 
    		</tr>
    		<tr>
    			<td>密码:</td>
    			<td><input type="text" name="password"/></td>
    		</tr>
    	</table>
    	<input type ="submit" name="submit" value="提交"/> 
    </form>
  </body>
</html>

然后看他的Demo.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'Demo.jsp' starting page</title>
  </head>
  <body>
    <%
    	String username = (String)request.getParameter("username");
    	if(username.equals("admin")){
    		session.setAttribute("username", username);
    		session.setAttribute("password", request.getParameter("password"));
    		response.sendRedirect("login.jsp");
    	}
    	else{
    		response.sendRedirect("index.jsp");
    	}
     %>
  </body>
</html>

然后再看login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  
  <body>
    	欢迎您:<%= session.getAttribute("username") %>,<br>
    	您的密码是:<%=session.getAttribute("password") %>
  </body>
</html>

每个Session都有一个唯一的sessionid,使用session.getId();会以字符串的形式返回这个sessionid。

由于session是保存在服务器中的,因此必须定时清理,否则会使服务器负担较大,甚至造成服务器崩溃。

会话的清理有两种方式:

1、程序主动请求清楚session,例如登陆后的注销功能。

2、服务器会主动清除长时间没有再被请求的session。

程序主动请求清除session数据可以使用语句:

session.invalidate()

移除session中的某个属性:

session.removeAttribute(String name);

服务器自动清除长时间没有发送请求的session常用方法:

1、设置会话过期时间:

session.setMaxInactiveInterval(int interval);

单位是秒。

2、在web.xml中设置会话过期时间:

<session-config>
    <session-timeout>30<session-timeout>
</session-config>

单位是分钟。

四、application对象

application对象用于保存所有应用程序中的公共数据,他在服务器启动时自动创建,在服务器停止时自动销毁,当application没有被销毁时,所有用户都可以共享该application对象。与session对象相比,他的生命周期更长,类似于系统的全局变量。

application对象提供了对应用程序初始化参数进行访问的方法。应用程序初始化参数在web.xml中进行设置,web.xml文件位于web应用目录下的WEB-INF目录下。在web.xml中通过<context-param>标签配置应用程序的初始化参数。

例如,在web.xml文档中配置连接MySQL数据库所需的url参数,可以通过getInitParameter(String name)方法获取。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Test</display-name>
  	<context-param>
		<param-name>url</param-name>
		<param-value>jdbc:mysql://127.0.0.1:3306/db_database</param-value>
	</context-param>
</web-app>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>读取配置文件</title>
  </head>
  
  <body>
    <%=application.getInitParameter("url") %>
  </body>
</html>

同时application也有setAttribute(String name,Object object)和getAttribute(String name)方法。通常使用连个方法统计网站访问人数。

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'PeopleCount.jsp' starting page</title>
</head>

<body>
	<%
		Integer number = (Integer)application.getAttribute("count"); 
		if ( number == null) {
			number = new Integer("1");
			application.setAttribute("count", number);
		}else{
			number = new Integer(number.intValue()+1);
			application.setAttribute("count", number);
		}
	%>
	<%=application.getAttribute("count") %>
</body>
</html>


 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值