文章目录

1 实验目的

  1. 掌握如何获得请求参数
  2. 了解如何通过请求对象获得客户信息;
  3. 重点掌握request对象、session对象、application对象的用法;
  4. 重点掌握使用请求对象存储数据请求转发

2 实验原理

2.1 request 对象

request对象封装了服务器信息(如端口号、真实路径及访问协议等)、客户端用户请求信息等。通过request对象可以获取服务器信息客户端请求信息等。

2.2 session 对象

在Web中,session对象有两个含义:

  1. 代表一种生命周期,指用户在浏览某个网站时,从进入网站到浏览器关闭这段时间,也就是用户浏览网站所花费的这段时间;
  2. 容器性的内置对象,有服务器为用户自动创建,为用户都享,常用来存放session生命周期中的有关信息。

2.3 application 对象

application对象保存着Web应用运行期间的全局数据和信息,从Web应用开始运行,该对象就被创建,在整个Web应用运行期间可以在任何JSP页面中访问这个对象,如果要保存整个Web应用运行期间都可以访问的数据,就要用到application对象。

3 实验内容与步骤

3.1 表单传参

编写用户表单JSP程序,显示用户表单传递结果。

3.1.1 编写 req_form.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 'req_form.jsp' starting page</title>
  </head>
  <body>
    <form action="req_recv.jsp" method="post">
       <table border="1">
            <tr><td>用户名:</td><td><input type="text" name="name"></td></tr>
            <tr><td>&nbsp;&nbsp; &nbsp;码:</td><td><input type="password" name="password"></td></tr>
            <tr><td colspan="2">
                  <input type="checkbox" name="hobby" value="骑车">骑自行车
                  <input type="checkbox" name="hobby" value="驾车">驾驶小汽车
                 </td>
             </tr>
            <tr align="center">
               <td colspan="2">
                  <input type="submit" value="提交">
                  <input type="reset" value="取消">
               </td>
            </tr>
        </table>
    </form>
  </body>
</html>

3.1.2 编写req_recv.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>request对象测试</title>
  </head>
  <body>
    <%
       request.setCharacterEncoding("UTF-8");
       String parameterName=null;
       String[] parameterValue=null;
     %>
     <p>使用request.getParameter("name")获取表单所有参数</p>
     <%
       out.println(request.getParameter("name"));
      %>
       <p>使用request.getParameterNames("name")获取表单所有参数</p>
      <%
         Enumeration en=request.getParameterNames();
         int j=0;
         while(en.hasMoreElements()){
            parameterName=(String)en.nextElement();
            parameterValue=request.getParameterValues(parameterName);
            out.println("表单参数名称:" + parameterName + "=");
       %>
       <%
         for(int i=0;i<parameterValue.length;i++){
        %>
        <%=parameterValue[i] %>
        <%} %><br/>
        <% } %>
  </body>
</html>

3.1.3 使用类似下面的URL访问之

http://localhost:8080/prac01_request/req_form.jsp

将出现如图2-1所示表单界面。

图2-1
单击提交按钮,弹出图2 -2所示界面。

图2-2

3.2 模拟用户登录

模拟一个用户登录动作,在这个实验中,不对用户提交信息作登录验证,只要用户名和密码不为空即可登录。

登录时将用户信息保存在session对象中(这样处理只是方便说明session对象的用法,具体开发中必须对登录信息进行数据库验证)。

编写3个JSP程序login.jsploginCheck.jspmain.jsp,程序功能分别是:

  1. 进行用户登录
  2. 登录信息处理
  3. 登录后工作页面中获取保存在session中的用户信息。

3.2.1 编写login.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>用户登录界面</title>
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
    <body>
    <font size="2">
      <form action="loginCheck.jsp" method="post">
         用户名:<input type="text" name="userName" size="10"/><br>&nbsp;&nbsp;&nbsp;码:<input type="password" name="passWord" size="10"/><br></font>
        <font size="1">(提交后,用户名将被存入session中)</font><br>
        <input type="submit" value="提交">
      </form>

  </body>
</html>

3.2.2 编写loginCheck.jsp

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>用户登录验证页面</title>
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
    <%
         request.setCharacterEncoding("UTF-8");
         String userName=request.getParameter("userName");
         String passWord=request.getParameter("passWord");
         if(userName.length()>0 && passWord.length()>0){
            session.setAttribute("uname", userName);
            response.sendRedirect("main.jsp");
         }else{
            response.sendRedirect("login.jsp");
         }
     %>
  </head>

  <body>

  </body>
</html>

3.2.3 编写main.jsp

<%@ 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>
    <font size="2">
      <%
          String uname=(String)session.getAttribute("uname");
          if(uname!=null){
            out.print("登录成功!欢迎" + uname + "浏览站点");
          }else{
            response.sendRedirect("login.jsp");
          }
       %><br>
       <font size="1" color="green">上述名称<%=uname %>是从session中取出的</font>
    </font>
  </body>
</html>

3.2.4 使用类似下面的URL访问之

在地址栏输入:http://localhost:8080/prac01_session/login.jsp
体会session的作用和用法,如图2-2、图2-3所示。

图2-2

图2-3

3.3 利用application对象实现网站访问计数

3.3.1 编写visitPageCount.jsp


<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>application测试</title>
  </head>
  <body>
    <font size="2">
      <%
      int count=0;
      if(application.getAttribute("count")==null){
           count=count+1;
           application.setAttribute("count", count);
       }else{
           count=Integer.parseInt(application.getAttribute("count").toString());
           count=count+1;
           application.setAttribute("count", count);
       }
       out.println("您是本系统的第" + count + "个访问者。");
       %>
    </font>
  </body>
</html>

3.3.2 使用类似下面的URL访问之

在浏览器地址栏输入URL如下:http://localhost:8080/prac01_application/visitPageCount.jsp

运行结果如图2-4所示。

图2-4

4 思考题

  1. 如何获得请求参数?
  2. 如何在请求对象中共享数据?

5 实验总结

这个实验中,实现了request对象、session对象、application对象的用法,实现数据的传递和共享。

10-03 13:45