• 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>
  • 相关阅读:
    免费的asp.net空间
    利用instr()函数防止SQL注入攻击
    Dreamweaver中sql注入式攻击的防范
    编写通用的ASP防SQL注入攻击程序
    跨站式SQL注入技巧
    防范Sql注入式攻击
    PHP与SQL注入攻击
    SQL注入攻击的原理及其防范措施
    SQL注入法攻击一日通
    SQL Server应用程序中的高级SQL注入
  • 原文地址:https://www.cnblogs.com/joeshine/p/4459154.html
Copyright © 2020-2023  润新知