聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> Servlets& Jsp 实验2:HTTP请求对象的使用

Servlets& Jsp 实验2:HTTP请求对象的使用

时间:2014-12-07 14:01:29    下载该word文档

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文件,将下面代码添加到其中:

helloUserServlet

com.demo.HelloUserServlet

helloUser

步骤3使用下面的URL访问之。

http://localhost:8080/helloapp/hellouser.do?userName=John

userName的值改为你自己的名字,看输出结果。若不给出查询字符串,结果如何?

参数值使用汉字如何?

2. 通过表单传递请求参数,使用HttpServletRequest对象获得请求参数

步骤1首先编写一个input.html文件,存放在helloapp目录中。该页面在屏幕上显示一个表单,其中包括姓名和年龄域,点击“确定”按钮后,将表单参数传递给ParamServlet并显示出来。input.html代码如下:

</span><span class='r_17_2'>参数传递</span><span class='r_0_2'>

从表单向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文件,将下面代码添加到其中:

ParamServlet

com.demo.ParamServlet

ParamServlet

/paramtest

【步骤4在浏览器的地址栏中输入:http://localhost:8080/helloapp/input.html。输入数据,点击“确定”按钮,体会表单参数的传递。

问题1如何通过超链接的锚标签()传递请求参数?

3. 编写一个Servlet,显示所有请求头

【步骤1ShowHeadersServlet.javaServlet能够检索所有的请求头,代码如下:

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("All Headers");

out.println("");

out.println("");

out.println("

All Request Headers

");

out.println("

\n"+

"

\n"+

"

Header NameHeader Value");

Enumeration headerNames = request.getHeaderNames();

while(headerNames.hasMoreElements()){

String headerName = (String)headerNames.nextElement();

out.println("

"+headerName);

out.println("

"+request.getHeader(headerName));

}

out.println("

\n");

}

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException{

doGet(request, response);

}

}

【步骤2修改web.xml,加入下面内容:

ShowHeadersServlet

com.dom.ShowHeadersServlet

ShowHeadersServlet

/showheaders

【步骤3在浏览器地址栏中输入下面URL访问该Servlet

http://localhost:8080/helloapp/showheaders

4. 简单的综合应用

【步骤1创建一个名为input.htmlHTML页面,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和取消按钮。

2.1 input.html页面显示结果

【步骤2定义一个名为com.demo.Student类,其中包括学号sno和姓名name两个private的成员变量,定义访问和修改snoname的方法。

【步骤3编写名为FirstServletServlet,要求当用户在input.html中输入信息后点击“提交”按钮,请求FirstServlet对其处理。在FirstServlet中使用表单传递的参数(学号和姓名)创建一个Student对象并将其作为属性存储在请求对象中,然后通过请求对象的getRequestDispatcher()方法获得RequestDispatcher()对象,将请求转发到SecondServlet

【步骤4SecondServlet中取出请求对象上存储的Student对象,并显示输出该学生的学号和姓名。

【步骤5SecondServlet的输出中应该包含一个链接,点击连接返回到input.html页面。

2.2 SecondServlet显示结果

input.html的代码如下:

Login Page

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("

");

out.println("");

}

}

web.xml文件对两个Servlet的配置代码如下:

firstServlet

/firstservlet

secondServlet

com.demo.SecondServlet

secondServlet

/secondservlet

实验代码:

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">

ParamServlet

com.demo.ParamServlet

ShowHeadersServlet

com.demo.ShowHeadersServlet

FirstServlet

com.demo.FirstServlet

FirstServlet

/firstservlet

SecondServlet

com.demo.SecondServlet

SecondServlet

/secondservlet

ParamServlet

/paramtest

ShowHeadersServlet

/showheaders.do

index.jsp

三. 思考题

1. Servlet中如何获得请求参数?

答:web组件之间参数传递有3种方式:

1request.getParameter("name");

    a、通过超链接

    b、通过表单

    c、通过servlet转发或重定向

    d、通过隐藏域完成

2pageContext.getAttribute("key");  //页面范围

     request.getAttribute("key");   //请求转发范围只能通过来转发请求

     session.getAttribute("key");   //浏览器范围

     //直接在任何jsp或这servlet中通过session来获取

     application.getAttribute("key");   //容器范围

    //直接在任何jsp或这servlet中通过application或者servletContext来获取

3Cookie   

2. 如何实现请求转发?如何使用请求对象中共享数据?

jsp  request.getRequestDispatcher("/*.jsp").forward(request,response);

servlet  sendRedirect()方法原理:  

      1,客户端发送请求,Servlet1做出处理。  

      2Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 Servlet2  

     3,客户端浏览器访问Servlet2. 

     4Servlet2对客户端浏览器做出响应。

     forward()方法原理: 

     1,客户端发送请求,Servlet1做出处理。 

     2Servlet调用forward()方法,将请求转发给Servlet2来处理请求,为客户端服务.

   3Servlet2对客户端浏览器做出响应。

<jsp:forward/>

request.getRequstDispatcher("").forward();

request.getRequstDispatcher("").include();

3. 计算贷款的月支付额公式如下:

编写一个JSP页面,通过表单输入贷款总额(50000)、年利率(5.75)和年数(5),然后通过servlet计算月还款额(960.84),总还款额(5765.30)。

<%@ page language="java" pageEncoding="UTF-8"%>

loan.jsp

计算贷款的月支付

学号:
姓名:

 

贷款总额:

年利率:

年数:

 

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">

DK

com.kaxi.DK

DK

/DK

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

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服