JEE_JSP3.JSP内置对象

JSP内置对象:Request,Response,Out,Session,Application,Cookie,Config,Page,Exception。

 

Request对象:

该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。

1.获取访问请求参数:

request.getParameter("id");

当我们通过超链接的形式发送请求时,可以为该请求传递参数,只要在超链接的后面加上问号“?”来实现,如果有多个参数则用“&”分隔开。

request对象则可用于处理HTTP请求中的各项参数。

客户端表单提交后,后台才可以调用request.getParameter("id");,

但客户端提交时可以调用request.setAttribute(String name, Object object);??

<a href="delete.jsp?id="1">删除</a>
<%
request.getParameter("id");
%>

例:request对象获取请求参数

index.jsp
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>使用request对象获取请求参数值</title>
</head>
<body>
<a href="deal.jsp?id=1&user=">处理页</a>
</body>
</html>
deal.jsp
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%
String id=request.getParameter("id");    //获取id参数的值
String user=request.getParameter("user");//获取user参数的值
String pwd=request.getParameter("pwd");//获取pwd参数值
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>处理页</title>
</head>
<body>
id参数的值为:<%=id %><br>
user参数的值为:<%=user %><br>
pwd参数的值为:<%=pwd %>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>7.1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

2.获取表单提交的信息

String strName=request.getParameter("username");

复选框和多选列表框选定内容则是由getParameterValues(String name)方法获取。

3.解决中文乱码

//1.
String user = new String(request.getParameter("user").getBytes("iso-8859-1"),"GB18030");
//2.
<%
    request.setCharacterEncoding("GB18030");
%>
String user = request.getParameter("username");

4.通过request对象进行数据传递

//1
request.setAttribute(String name, Object object);
//2
request.getAttribute(String name);

例:request的setAttribute()和getAttribute()方法

index.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<%
try{//捕获异常信息
    int money=100;
    int number=0;
    request.setAttribute("result",money/number);//保存执行结果
}catch(Exception e){
    request.setAttribute("result","很抱歉,页面产生错误!");//保存错误提示信息
}
%>
<jsp:forward page="deal.jsp"/>
</body>
</html>
deal.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>结果页</title>
</head>
<body>
<%String message=request.getAttribute("result").toString(); %>
<%=message %>
</body>
</html>

5.获取客户端信息

例:使用request对象的相关方法获取客户端信息

View Code
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>使用request对象的相关方法获取客户端信息</title>
</head>
<body>
<br>客户提交信息的方式:<%=request.getMethod()%>
<br>使用的协议:<%=request.getProtocol()%>
<br>获取发出请求字符串的客户端地址:<%=request.getRequestURI()%>
<br>获取发出请求字符串的客户端地址:<%=request.getRequestURL()%>
<br>获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%>
<br>获取服务器端口号:<%=request.getServerPort()%>
<br>获取服务器的名称:<%=request.getServerName()%>
<br>获取客户端的主机名:<%=request.getRemoteHost()%>
<br>获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath()%>
<br>获得Http协议定义的文件头信息Host的值:<%=request.getHeader("host")%>
<br>获得Http协议定义的文件头信息User-Agent的值:<%=request.getHeader("user-agent")%>
<br>获得Http协议定义的文件头信息accept-language的值:<%=request.getHeader("accept-language")%>
<br>获得请求文件的绝对路径:<%=request.getRealPath("index.jsp")%>
</body>
</html>

6.获取cookie

cookie指小段的文本信息,在网络服务器上生成,并发送给浏览器。通过cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。

浏览器将cookie以键值对的方式保存到客户机的某个指定目录中。

通过cookie的getCookies()方法可以获得所有cookie对象的集合;通过cookie对象的getName()方法可以获取指定名称的cookie;

通过getValue()方法可以获取cookie对象的值.

例:通过cookie保存并读取用户登录信息

index.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>通过cookie保存并读取用户登录信息</title>
</head>
<body>
<%
    Cookie[] cookies = request.getCookies();//从request中获得Cookie对象的集合
    String user = "";    //登录用户
    String date = "";    //注册的时间
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {    //遍历cookie对象的集合
            if (cookies[i].getName().equals("mrCookie")) {//如果cookie对象的名称为mrCookie
                user = URLDecoder.decode(cookies[i].getValue().split("#")[0]);//获取用户名
//sqlit()表示转换成数组
//在向cookie中保存的信息中,如果包括中文,则需要调用encode()方法将要保存到cookie中的信息进行编码;在读取cookie的内容时,还需要应用decode()方法进行解码。这样才可以想cookie中写入中文信息。

                date = cookies[i].getValue().split("#")[1];//获取注册时间
            }
        }
    }
    if ("".equals(user) && "".equals(date)) {//如果没有注册
%>
        游客您好,欢迎您初次光临!
        <form action="deal.jsp" method="post">
            请输入姓名:<input name="user" type="text" value="">
            <input type="submit" value="确定">
        </form>
<%
    } else {//已经注册
%>
        欢迎[<b><%=user %></b>]再次光临<br>
        您注册的时间是:<%=date %>
<%
    }
%>
</body>
</html>
deal.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ page import="java.net.URLEncoder" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>写入cookie</title>
</head>
<body>
<%
request.setCharacterEncoding("GB18030");
String user=URLEncoder.encode(request.getParameter("user"),"GB18030");    //获取用户名
Cookie cookie = new Cookie("mrCookie", user+"#"+new java.util.Date().toLocaleString());
cookie.setMaxAge(60*60*24*30);        //设置cookie有效期30天
response.addCookie(cookie);    //保存cookie
%>
<script type="text/javascript">window.location.href="index.jsp"</script>
</body>
</html>

7.显示国际化信息 request对象中的getLocale()和getLocales()方法。

 

response响应对象:

1.实现重定向页面

response.sendRedirect(“login.jsp”);

2.处理HTTP文件头

设置响应的内容类型:response.setContentType(String type); type可选值:text/html,application/msword等。

禁用缓存:<%response.setHeader("Cache-Control","no-store");  response.setDateHeader("Expires",0); %>

设置页面自动刷新:<% response.setHeader("refresh","10"); %>

定时跳转页面:<% response.setHeader("refresh","5;URL=login.jsp"); %>

3.设置输出缓冲

response.setBufferSize(32);

 

out输出对象:

1.向客户端输出数据

out.print();//输出数据

out.newLine();//输出一个换行符

2.管理相应缓冲区 out.flush();//输出缓冲区里的数据 out.close();//关闭输出流 out.clearBuffer();//清除缓冲区里的数据,并把数据输出到客户端 out.clear();//清除缓冲区里的数据,但不会把数据输出到客户端 out.getBufferSize();//获得缓冲区大小 out.getRemaining();//获得缓冲区中没有被占用的空间大小 out.isAutoFlush();//返回布尔值。如果AutoFlush为真 则返回真。

 

session会话对象:

session在网络中被称为会话,常用于记录用户状态.

由于HTTP协议是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求并返回响应后,该连接就结束了,服务器不保存相关信息.

通过session可以使用户在应用程序的Web页面间进行跳转,保存用户状态,使整个用户会话一直存在下去,直到浏览器关闭.

1.创建及获取客户的会话

session.setAttribute("username","无语") 设置指定名字的属性值并将其存储在session中。

session.getAttribute("username").toString() 获取与指定名字相联系的属性,返回的是Object类型,要转换成String类型.

2.从会话中移除指定对象

<% session.removeAttribute("username"); %>

3.设置session的有效时间

session.setMaxInactiveInterval(3600) ;

4.销毁session

session.invalidate();

例:应用session对象实现用户登录(session对象常用于记录用户的状态)

index.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>应用session对象实现用户登录</title>
</head>
<body>
<form name="form1" method="post" action="deal.jsp">
用户名: <input    name="username" type="text" id="name" style="width: 120px"><br>&nbsp;&nbsp;码: <input name="pwd" type="password" id="pwd" style="width: 120px"> <br>
<br>
<input type="submit" name="Submit" value="登录">
</form>
</body>
</html>
deal.jsp
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="java.util.*" %>
<%
String[][] userList={{"mr","mrsoft"},{"wgh","111"},{"sk","111"}};    //定义一个保存用户列表的二维组
boolean flag=false;    //登录状态
request.setCharacterEncoding("GB18030");    //设置编码
String username=request.getParameter("username");    //获取用户名
String pwd=request.getParameter("pwd");    //获取密码
for(int i=0;i<userList.length;i++){    //遍历二维数组
    if(userList[i][0].equals(username)){    //判断用户名
        if(userList[i][1].equals(pwd)){    //判断密码
            flag=true;    //表示登录成功
            break;//跳出for循环
        }
    }
}
if(flag){    //如果值为true,表示登录成功
    session.setAttribute("username",username);//保存用户名到session范围的变量中
    response.sendRedirect("main.jsp");    //跳转到主页
}else{
    response.sendRedirect("index.jsp");    //跳转到用户登录页面
}
%>
main.jsp
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%
String username=(String)session.getAttribute("username");    //获取保存在session范围内的用户名 
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>系统主页</title>
</head>
<body>
您好![<%=username %>]欢迎您访问!<br>
<a href="exit.jsp">[退出]</a>
</body>
</html>
exit.jsp
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%
session.invalidate();//销毁session
response.sendRedirect("index.jsp");//重定向页面到index.jsp
%>

 

application应用对象:

application对象常用于保存所有应用程序中的共有数据.它在服务器启动时自动创建,在服务器停止时销毁,生命周期比session长.

1.访问应用程序初始化参数(应用程序初始化参数在web.xml文件中设置)

application.getInitParameter("url") 返回由指定名字的application对象的某个属性的初始值

application.getInitParameterNames();返回所有已定义的应用程序初始化参数名的枚举Enumeration

2.应用程序环境属性管理

<% application.setAttribute("number",0); %>

<% application.getAttribute("number"); %>

<% application.removeAttribute("number"); %>

例:应用application对象实现网页计数器

View Code
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>应用application对象实现网页计数器</title>
</head>
<body>
<% 
int number=0;    //定义一个保存访问次数的变量
if(application.getAttribute("number")==null){//当用户第一次访问时
    number=1;
}else{
    number=Integer.parseInt(application.getAttribute("number").toString());//获取application范围内的变量,并转换为int型
    number=number+1;//让访问次数加1
}
out.print("您是第"+number+"位访问者!");//输出当前访问次数
application.setAttribute("number",number);        //将新的访问次数保存到application范围内的属性中
%>
</body>
</html>

 

page应答与请求对象:

View Code
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>page对象各方法的应用</title>
</head>
<body>
<%!
Object object;     //声明一个Object型的变量
%>
<ul>
<li>getClass()方法的返回值:<%=page.getClass()%></li>
<li>hashCode()方法的返回值:<%=page.hashCode()%></li>
<li>toString()方法的返回值:<%=page.toString()%></li>
<li>与Object对象比较的返回值:<%=page.equals(object)%></li>
<li>与this对象比较的返回值:<%=page.equals(this)%></li>
</ul>
</body>
</html>

 

pageContext获取页面上下文对象:

pageContext对象常用方法:

forward(String UriPath) 重定向 getAttribute(String name,[int scope] )  scope可选。用来检索一个特定的已经 命名的对象的范围,并且还可以通过调用 getAttributeNamesInScope()方法 ,检索对鞭个特定范围的每个属性String字符串名称的枚举。 getException()返回当前的exception对象 getRequest()返回当前的request对象 getResponse()返回当前的response对象 getServletConfig()返回当前页面的ServletConfig对象 getServletContext()返回ServletContext对象。这个对象对所有页面都是共享的 getSession() 返回当前的session对象 findAttribute() 可以用来按照页面,请求,会话以及应用程序范围顺序实现对某个已经命名的属性的搜索。 setAttribute() 可以用来设置默认页面范围或特定范围之中的已命名对象。removeAttribute()可以用来删除默认范围或特定范围内的已命名对象

 

web.xml中的config获取配置信息对象:

getServletContext() 返回执行者的Servlet上下文 getServletName()返回Servlet的名字 getInitParameter(String name) 返回名字为name的初始参数的值 getInitParameterNames() 返回这个JSP的所有的初始参数的名字

 

exception获取异常信息对象:

getMessage()

getLocalizedmessage()

toString()

fillInStackTrace()

 

 

==============================================

参考推荐: http://www.cnblogs.com/eflylab/archive/2007/01/16/621275.html

http://www.cnblogs.com/kelin1314/archive/2011/03/03/1969578.html

http://zhidao.baidu.com/question/69296335.html

posted @ 2012-08-14 18:25  汤姆是一只猫  阅读(563)  评论(0编辑  收藏  举报