2 实验二 HTTP请求对象的使用
一. 实验目的
1. 掌握如何获得请求参数;
2. 掌握如何检索请求头;
3. 了解如何通过请求对象获得客户信息;
4. 重点掌握使用请求对象存储数据和请求转发。
二. 实验内容
1. 通过查询串传递请求参数,并在Servlet中检索请求参数
步骤1:编写下面的Servlet。
package com.demo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloUserServlet extends HttpServlet{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
String userName = request.getParameter("userName");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println("");
out.println("");
out.println("Hello, " +
userName + "");
out.println("");
out.println("");
}
}
步骤2:编译该Servlet,然后修改web.xml文件,将下面代码添加到其中:
步骤3:使用下面的URL访问之。
http://localhost:8080/helloapp/hellouser.do?userName=John
将userName的值改为你自己的名字,看输出结果。若不给出查询字符串,结果如何?
参数值使用汉字如何?
2. 通过表单传递请求参数,使用HttpServletRequest对象获得请求参数
步骤1:首先编写一个input.html文件,存放在helloapp目录中。该页面在屏幕上显示一个表单,其中包括姓名和年龄域,点击“确定”按钮后,将表单参数传递给ParamServlet并显示出来。input.html代码如下:
从表单向Servlet传递参数
姓名:
年龄:
【步骤2】编写ParamServlet.java,其代码如下:
package com.demo;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ParamServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
response.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
String name = request.getParameter("name");
name = new String(name.getBytes("iso8859-1"),"gb2312");
String age = request.getParameter("age");
age = new String(age.getBytes("iso8859-1"),"gb2312");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println("");
out.println("");
out.println("姓名:"+name+" ");
out.println("年龄:"+age+" ");
out.println("");
out.println("");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
doGet(request, response);
}
}
【步骤3】修改web.xml文件,将下面代码添加到其中:
【步骤4】在浏览器的地址栏中输入:http://localhost:8080/helloapp/input.html。输入数据,点击“确定”按钮,体会表单参数的传递。
3. 编写一个Servlet,显示所有请求头
【步骤1】ShowHeadersServlet.java的Servlet能够检索所有的请求头,代码如下:
package com.demo;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ShowHeadersServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("");
out.println("
out.println("");
out.println("");
out.println("All Request Headers
");
out.println(" " " Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()){ String headerName = (String)headerNames.nextElement(); out.println(" out.println(" } out.println("\n"+
\n");\n"+ Header Name Header Value"); "+headerName); "+request.getHeader(headerName));
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
doGet(request, response);
}
}
【步骤2】修改web.xml,加入下面内容:
【步骤3】在浏览器地址栏中输入下面URL访问该Servlet
http://localhost:8080/helloapp/showheaders
4. 简单的综合应用
【步骤1】创建一个名为input.html的HTML页面,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和取消按钮。
图2.1 input.html页面显示结果
【步骤2】定义一个名为com.demo.Student类,其中包括学号sno和姓名name两个private的成员变量,定义访问和修改sno和name的方法。
【步骤3】编写名为FirstServlet的Servlet,要求当用户在input.html中输入信息后点击“提交”按钮,请求FirstServlet对其处理。在FirstServlet中使用表单传递的参数(学号和姓名)创建一个Student对象并将其作为属性存储在请求对象中,然后通过请求对象的getRequestDispatcher()方法获得RequestDispatcher()对象,将请求转发到SecondServlet。
【步骤4】在SecondServlet中取出请求对象上存储的Student对象,并显示输出该学生的学号和姓名。
【步骤5】在SecondServlet的输出中应该包含一个链接,点击连接返回到input.html页面。
图2.2 SecondServlet显示结果
input.html的代码如下:
cellpading="2" cellspacing="1"> // FirstServlet.java的代码如下: package com.demo; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import com.model.Student; public class FirstServlet extends HttpServlet { ServletContext context; public void init(){ context = getServletContext(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ request.setCharacterEncoding("gb2312"); String snumber = request.getParameter("snumber"); String sname = request.getParameter("sname"); Student stud = new Student(snumber,sname); request.setAttribute("stud",stud); RequestDispatcher view = request.getRequestDispatcher("/secondservlet"); view.forward(request, response); } } // SecondServlet.java的代码如下: package com.demo; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import com.model.Student; public class SecondServlet extends HttpServlet { ServletContext context; public void init(){ context = getServletContext(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ Student stud = (Student)request.getAttribute("stud"); response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.println(""); out.println(" out.println("学号:"+stud.getSnumber()+""); out.println("姓名:"+stud.getSname()+""); out.println(""); out.println(""); } } web.xml文件对两个Servlet的配置代码如下: 实验代码: package com.demo; public class Student { private String sno; private String name; public Student(String sno,String name){ super(); this.sno=sno; this.name=name; } public Student(){ super(); } public String getSno(){ return sno; } public void setSno(String sno){ this.sno=sno; } public String getName(){ return name; } public void setName(String name){ this.name=name; } } Web.xml: xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 三. 思考题 1. 在Servlet中如何获得请求参数? 答:web组件之间参数传递有3种方式: (1)request.getParameter("name"); a、通过超链接 b、通过表单 c、通过servlet转发或重定向 d、通过隐藏域完成 (2)pageContext.getAttribute("key"); //页面范围 request.getAttribute("key"); //请求转发范围只能通过来转发请求 session.getAttribute("key"); //浏览器范围 //直接在任何jsp或这servlet中通过session来获取 application.getAttribute("key"); //容器范围 //直接在任何jsp或这servlet中通过application或者servletContext来获取 (3)Cookie 2. 如何实现请求转发?如何使用请求对象中共享数据? jsp : request.getRequestDispatcher("/*.jsp").forward(request,response); <jsp:forward/>或 3. 计算贷款的月支付额公式如下: 编写一个JSP页面,通过表单输入贷款总额(50000)、年利率(5.75)和年数(5),然后通过servlet计算月还款额(960.84),总还款额(5765.30)。 <%@ page language="java" pageEncoding="UTF-8"%> 计算贷款的月支付 贷款总额: 年利率: 年数: xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> package com.kaxi; import java.util.Scanner; import java.io.IOException; import java.io.PrintWriter; import java.text.DecimalFormat; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DK extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setCharacterEncoding("gb2312"); response.setContentType("text/html;charset=gb2312"); String total = request.getParameter("total"); total = new String(total.getBytes("iso8859-1"),"gb2312"); String tax = request.getParameter("tax"); tax = new String(tax.getBytes("iso8859-1"),"gb2312"); String year = request.getParameter("year"); year = new String(year.getBytes("iso8859-1"),"gb2312"); double Total=Double.parseDouble(total); double Tax=Double.parseDouble(tax); double Year=Double.parseDouble(year); double month_tax=Tax/12/100; double a=Total*month_tax; double b=1/Math.pow(1+month_tax, Year*12); double month_pay=a/(1-b); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(""); out.println(""); out.println("月还款额:"+month_pay+" "); out.println("总还款额:"+month_pay*12*Year+" "); out.println(""); out.println(""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ doGet(request, response); } }
¥29.8
¥9.9
¥59.8
学号: 姓名:
servlet: sendRedirect()方法原理:
1,客户端发送请求,Servlet1做出处理。
2,Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 到Servlet2。
3,客户端浏览器访问Servlet2.
4,Servlet2对客户端浏览器做出响应。
forward()方法原理:
1,客户端发送请求,Servlet1做出处理。
2,Servlet调用forward()方法,将请求转发给Servlet2来处理请求,为客户端服务.
3,Servlet2对客户端浏览器做出响应。
request.getRequstDispatcher("").forward();
request.getRequstDispatcher("").include();
Word文档免费下载:
Servlets& Jsp 实验2:HTTP请求对象的使用
TOP热门搜索
¥45
每天只需1.0元
¥15
¥90
选择支付方式