JSP内置对象

1、JSP内置对象有9个:application,config,exception,out,page,pageContext,request,response,session.

2、request请求对象

  request请求对象封装了由客户端生成的HTTP请求的所有细节,包括HTTP头信息、系统信息、请求方式和请求参数等。通过request提供的方法,可以处理客户端浏览器提交的HTTP请求中的各项参数。

  1)  获取访问请求参数:通过超链接的形式发送请求时,可以用?和&加上参数信息,接收的页面可以通过request对象的getParameter方法获得此参数。

  2)  获取表单提交的信息:通过getParameter方法获取表单的信息,以相对应的name值进行传递,返回参数类型是String,有时候也用getParameterValues方法获取参数。

  3)  解决中文乱码问题

    获取请求参数时乱码:将获取到的字符串数据用String类的构造方法,用UTF-8或者GBK重新构造一个String对象,才可以正确显示中文。String user=new String(request.getParameter("user").getBytes("iso-8859-1"),"utf-8");

    获取表单信息时乱码:可以在page指令下方加上request对象的setCharacterEncoding("utf-8")方法。

  4)  进行数据传递:通过request对象的getAttribute(String name,Object object);方法把数据保存在request对象中,通过getAttribute(String name).toString();将数据取出。

index.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request练习</title>
</head>
<body>
<!--先用try捕获页面一次,catch进行异常处理 ,转向错误显示页面-->
<%
try
{
    int a=12;
    int b=0;
    request.setAttribute("result",a/b);
}
catch(Exception e)
{
    request.setAttribute("request", "您的页面错误!");
}
%>
<jsp:forward page="deal.jsp" />
</body>
</html>

deal.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>错误页面</title>
</head>
<body>
<%
    String message=request.getAttribute("request").toString();
%>
<%=message %>
</body>
</html>

  5)  获取客户端信息

  6)  获取cookie:它是互联网上的小段的文本信息,在网络服务器上生成,并发送给浏览器。浏览器将cookie以key/value的形式保存到和客户端的某指定目录中。

  7)  显示国际化信息

3、response对象:response对象用于响应客户请求,向客户端发送响应信息。请求的信息可以是数据类型也可以是文件。response对象在JSP页面内有效。

  1)  实现重定向页面:重定向操作支持将地址重定向到不同的主机上,重定向后,request中的属性全部失效,并且开始一个新的request对象。方法是sendRedirect(String url)。

重定向和请求转发(<jsp:forward page="">)的不同是前者不会改变浏览器的地址值,而后者是会跳转到其它页面,地址会改变。

  2)  处理HTTP文件头:可以设置HTTP响应报头

    设置响应的内容类型:response.setContentType(String type);,type用于指定响应的内容类型。

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

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

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

  3)  设置输出缓冲:通常,服务器要输出到客户端的内容不会直接写到客户端,而是要先输出到一个缓冲区中,然后满足一定条件才会把内容输出到客户端。条件便是:

    JSP页面的全部信息都写到缓冲区中了;

    缓冲区已满;

    在JSP页面中调用了response对象的flushbuffer()方法或out对象的flush()方法。

4、out对象:用于向客户端输出信息,并管理应用服务器上的输出缓冲区。注意及时关闭输出流。

  1)  向客户端输出数据:print()方法和JSP表达式效果一样,println()有一个换行,但实际情况下两者效果一样,看不到换行,需要用预格式化标签<pre></pre>来处理。

  2)  管理相应的缓冲区:clear方法清除缓冲区内容,但提交了内容是要报异常IOException,用clearBuffer()方法是不会报异常的。

5、session对象:session在网络中叫会话,由于http协议是单纯的请求和访问,并不会保存活动状态,为弥补此缺点,session对象就是保存用户的信息,让用户可以在web间跳转都可以保持会话,不会中断,直到关闭浏览器。会话的时间长度是由服务器来设置的。

  1)  创建和获取客户的session:用户名或者购物车需要用到session对象。将信息保存在session中的方法是session.setAttribute(String name,Object object),获取session用session.getAttribute(String name);

  2)  从会话中移除某一个对象:session.removeAttribute(String name);

  3)  设置session的有效时间:session.setMaxInactiveInterval(int time),参数单位是秒。

  4)  销毁会话:session.Invalidate();

6、application应用对象:用于保存所有应用程序中的公有数据。它在服务器启动时自动创建,在停止时自动销毁。它类似于全局变量。

  1)  访问应用程序初始化参数:应用程序的初始化参数存放在web.xml中,比如Mysql数据库配置的字符串可以存放在web.xml文件中。application对象提供了两种方法来访问应用程序初始化参数。其实际上是在访问web.xml中的数据。两个方法是application.getInitParameter(String name);和application.getAttributeNames();返回枚举类型的数据。

  2)  应用程序环境属性管理:通过application对象可以存储、读取或者移除应用程序环境属性。方法有setAttribute(String name,Object object);,getAttribute(String name)和getAttributeNames();和removeAttribute(String name);

7、应答与请求的page对象:page对象代表JSP本身,在jsp页面内才是合法的,page对象本质上是包含当前Servlet接口引用的变量,可以看作this关键字的别名。

8、获取页面上下文的pageContext对象:通过它可以获取JSP页面的request、response、session、application、Exception等对象。

9、获取web.xml配置信息的config对象。

10、获取异常信息的Exception对象:用来处理JSP页面所有的异常和错误。只有在page指令中设置为isErrorPage属性值为true的页面才可以被使用。如果在JSP页面中出现没有捕捉到的异常,就会生成Exception对象,并把Exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的Exception对象。

11、session的例子

index.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    /*
        用session对话编写登录程序:
            index.jsp页面用于收集用户登录信息;deal.jsp页面用于模拟用户登录,创建session对象,
        如果用户登录成功,将用户名保存在session范围内的变量中,并将页面重定向到main.jsp页面中,否则将页面重定向到index.jsp
        页面中,重新登录;编写main.jsp显示保存在session中的变量,然后加入一个退出超链接;编写一个exit.jsp,销毁session,
        重新定向到index.jsp
    */
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
<form name="form1" method="post" action="deal.jsp">
    用户名:<input type="text" name="username" id="username">
    密码:<input type="password" name="pwd" id="pwd">
    <input type="submit" name="submit1" value="登录">
</form>
</body>
</html>

deal.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
    <%@ page import="java.util.*" %>
<%
    //定义一个存储用户数据的二位数组,用来和用户登录数据进行比对
    String[][] userList={{"user1","pwd1"},{"user2","pwd2"},{"user3","pwd3"}};
    request.setCharacterEncoding("UTF-8");                        //保证中文用户名正常输入
    String user=request.getParameter("username");                //获取用户名
    String pwd=request.getParameter("pwd");                        //获取密码
    boolean tag=false;                                            //设置登录状态,默认是未登录
    //遍历存储的用户数据,进行比对
    for(int i=0;i<userList.length;i++)
    {
        if(userList[i][0].equals(user) && userList[i][1].equals(pwd))
        {
            tag=true;                                            //如果用户名和密码匹配,为登录状态
            break;
        }
    }
    if(tag)
    {
        //将用户名和密码保存在session会话中,保证页面跳转都能能在登录状态
        session.setAttribute("user", user);
        //session.setAttribute("pwd", pwd);
        response.sendRedirect("main.jsp");
    }
    else
    {
        response.sendRedirect("index.jsp");        
    }
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>模拟登陆页面</title>
</head>
<body>
</body>
</html>

main.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String user=(String)session.getAttribute("user");
    //String pwd=(String)session.getAttribute("pwd");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功显示</title>
</head>
<body>

<%= "您好!欢迎"+user+"访问!" %>
<a href="exit.jsp">退出登录</a>
</body>
</html>

exit.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>销毁会话退出登录</title>
</head>
<body>
<%
    session.invalidate();//销毁会话
    response.sendRedirect("index.jsp");  //重定向到首页
%>
</body>
</html>

12、有验证码登录的例子

index.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 带验证码的用户登录 -->
<!-- 设计步骤:
         1、设置用户名、密码、验证码框
         2、设计随机数
         3、设计隐藏域文本框
         4、显示验证码图片,将随机数值和图片名称匹配
         5、设置重置和提交按钮
         6、用js验证表单是否为空
         7、设置支持中文的编码
         8、用request对象获得表单数据,判断验证码和用户名密码的合法性
         9、登录结果用js代码给出提示界面
 -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录设计</title>
<style>
    .submit2
    {}
</style>
<!-- 验证表达是否为空 -->
<script type="text/javascript">
    function mycheck() {
        if (form1.username.value == "") 
        {
            //判断用户名是不为空
            alert("请输入用户名!");
            form1.username.focus();
            return;
        }
        if (form1.pwd.value == "") 
        {
            //判断密码是否为空
            alert("请输入密码!");
            form1.pwd.focus();
            return;
        }
        if (form1.yanzheng.value == "") 
        {
            //判断验证码是否为空
            alert("请输入验证码!");
            form1.yanzheng.focus();
            return;
        }
        if (form1.yanzhengma.value != form1.hidden1.value) 
        {
            //判断验证码是否正确
            alert("请输入正确的验证码!!");
            form1.yanzhengma.focus();
            return;
        }
    }
</script>
</head>
<body>
<!-- 设置用户名密码验证码文本框 -->
<form name="form1" method="post" action="check.jsp">
    用户名:<input type="text" name="username"><br><br>
    密码:&nbsp;<input type="password" name="pwd"><br><br>
    验证码:<input type="text" name="yanzhengma" size="8">
<!-- 设置随机数 -->
<%
    int num1=(int)(Math.random()*10);
    int num2=(int)(Math.random()*10);
    int num3=(int)(Math.random()*10);
    int num4=(int)(Math.random()*10);
    String sumNum=""+num1+num2+num3+num4;
%>
<!-- 设计隐藏域文本 -->
<input type="hidden" name="hidden1" value="<%=sumNum%>">
<!-- 显示验证码图片 -->
<img src="num/<%= num1%>.GIF">
<img src="num/<%= num2%>.GIF">
<img src="num/<%= num3%>.GIF">
<img src="num/<%= num4%>.GIF">
<br><br>
<input type="submit" name="submit1" class="submit2" value="登录" onclick="mycheck()">
<input type="reset" name="reset1" class="submit2" value="重置">
</form>
</body>
</html>

deal.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("UTF-8");               //中文保证输入
    String username=request.getParameter("username");    //获取用户名
    String pwd=request.getParameter("pwd");                //获取密码
    String message;
    if(!request.getParameter("hidden1").equals(request.getParameter("yanzhengma")))
    {
        message="您输入的验证码不正确!";
    }
    else if(username.equals("joe") && pwd.equals("shine"))
    {
        message="可以登录系统!";
    }
    else
    {
        message="您输入的用户名或密码不正确!";
    }
%>
<script type="text/javascript">
alert("<%=message%>");
window.location.href="index.jsp";
</script>

 

posted @ 2015-04-27 22:24  Joe_Shine  阅读(215)  评论(0编辑  收藏  举报