实验内容:

    1.按照实验一的要求搭建Java Web开发环境;

2.创建并部署一个Servlet,要求在Servlet生命周期的每一个阶段输出一行调试信息。

Servlet.java代码如下:

package cn.edu.qfnu.ch06.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class LifeServlet extends HttpServlet {

    private static final long serialVersionUID  = 1L;

        public LifeServlet() {

        super();

        // TODO Auto-generated  constructor stub

     }

        public void  init(ServletConfig config) throws ServletException {

        System.out.println("init()方法被调用!");

    }

    public void destroy() {

        System.out.println("destroy()方法被调用!");

    }

    protected void  service(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {

        System.out.println("service()方法被调用!");

    }

        protected void  doGet(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {

        System.out.println("doGet()方法被调用!");

    }

    protected void  doPost(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {

        System.out.println("doPost()方法被调用!");

    }

}

Web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID"  version="3.0">

  <display-name>shiyanliude</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  <servlet>

    <description></description>

    <display-name>LifeServlet</display-name>

    <servlet-name>LifeServlet</servlet-name>

    <servlet-class>cn.edu.qfnu.ch06.servlet.LifeServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>LifeServlet</servlet-name>

    <url-pattern>/LifeServlet</url-pattern>

  </servlet-mapping>

</web-app>

在浏览器中输入:http://localhost:8080/shiyanliude/LifeServlet

eclipse中的console

第一次请求时:

spacer.gif

        1

再次请求时输出结果:

spacer.gif

      2

重新启动服务器时,输出结果:

spacer.gif

        3

3.编程比较Servlet重定向和请求转发的区别。

重定向:

RedirectServlet代码如下:

package cn.edu.qfnu.ch06.servlet;

import java.io.IOException;

 import  javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class RedirectServlet extends HttpServlet {

    private static final long serialVersionUID  = 1L;

    public RedirectServlet() {

        super();

    }

    protected void doGet(HttpServletRequest  request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");

        request.setAttribute("name",  "qiaozhiqing");

        request.setAttribute("pwd",  "123456");

response.sendRedirect("TargetServlet");

    }

    protected void doPost(HttpServletRequest  request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request,response);

    }

}

TargetServlet代码如下:

package cn.edu.qfnu.ch06.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class TargetServlet extends HttpServlet {

    private static final long serialVersionUID  = 1L;

    public TargetServlet() {

        super();

    }

    protected void  doGet(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");

        PrintWriter  out=response.getWriter();

        String  name=(String)request.getAttribute("name");

        String  pwd=(String)request.getAttribute("pwd");

        out.print("request对象中的值<br>");

        out.print("name="+name+"<br>");

        out.print("pwd="+pwd);

    }

    protected void  doPost(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {

        doGet(request,response);

    }

}

Servlet配置的Web.xml代码如下:

<servlet>

     <description></description>

     <display-name>RedirectServlet</display-name>

     <servlet-name>RedirectServlet</servlet-name>

     <servlet-class>cn.edu.qfnu.ch06.servlet.RedirectServlet</servlet-class>

   </servlet>

   <servlet-mapping>

     <servlet-name>RedirectServlet</servlet-name>

     <url-pattern>/RedirectServlet</url-pattern>

   </servlet-mapping>

   <servlet>

     <description></description>

     <display-name>TargetServlet</display-name>

     <servlet-name>TargetServlet</servlet-name>

     <servlet-class>cn.edu.qfnu.ch06.servlet.TargetServlet</servlet-class>

   </servlet>

   <servlet-mapping>

     <servlet-name>TargetServlet</servlet-name>

     <url-pattern>/TargetServlet</url-pattern>

   </servlet-mapping>

spacer.gif

          4请求地址发生变化

请求转发:

ForwardServlet的代码:

package  cn.edu.qfnu.ch06.servlet;

import  java.io.IOException;

import  javax.servlet.RequestDispatcher;

import  javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import  javax.servlet.http.HttpServletRequest;

import  javax.servlet.http.HttpServletResponse;

publicclass ForwardServlet extends HttpServlet {

    privatestaticfinallongserialVersionUID = 1L;

    public ForwardServlet() {

        super();

    }

    protectedvoid doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");

        request.setAttribute("name", "qiao");

        request.setAttribute("pwd", "123456");

        RequestDispatcher  rd=request.getRequestDispatcher("TargetServlet");

        rd.forward(request,  response);

    }

    protectedvoid doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {

        doGet(request,response);

    }

}

ForwardServlet的配置代码:

<servlet>

    <description></description>

    <display-name>ForwardServlet</display-name>

    <servlet-name>ForwardServlet</servlet-name>

    <servlet-class>cn.edu.qfnu.ch06.servlet.ForwardServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>ForwardServlet</servlet-name>

    <url-pattern>/ForwardServlet</url-pattern>

   </servlet-mapping>

 

 

 

在浏览器中输入 http://localhost:8080/shiyanliude/ForwardServlet结果如下:

spacer.gif

              5请求地址没有发生变化

虽然重定向和请求转发都可以实现对访问资源的更改,但是两者是有区别的。请求转发是容器内控制权的转移,转发前后仍处于同一个请求对象内,地址栏的地址在转发前后不发生变化。重定向是完全的跳转,浏览器会跳转到重定向地址,并重新发送请求。

4.编写并部署Servlet来获取表单和查询字符串中的信息,要求能够处理中文。

search.html代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD  HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta  http-equiv="Content-Type" content="text/html;  charset=UTF-8">

<title>表单调查</title>

</head>

<body>

<form action="SearchServlet"  method="post">

用户名:<input type="text" name="username"/><br>

码:<input type="password"  name="password"/><br>

<input type="submit"  value="提交"/>&nbsp;&nbsp;

<input type="reset"  value="重置"/>

</form>

</body>

</html>


 
 

SearchServlet.java代码如下:

package cn.edu.qfnu.ch06.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import  javax.servlet.ServletException;

import  javax.servlet.http.HttpServlet;

import  javax.servlet.http.HttpServletRequest;

import  javax.servlet.http.HttpServletResponse;

publicclass SearchServlet extends  HttpServlet {

    privatestaticfinallongserialVersionUID = 1L;

        public  SearchServlet() {

        super();

          }

    protectedvoid doGet(HttpServletRequest  request, HttpServletResponse response) throws ServletException,  IOException {

    doPost(request,response);  

    }

    protectedvoid doPost(HttpServletRequest  request, HttpServletResponse response) throws ServletException,  IOException {

       String username=request.getParameter("username");

       String Password=request.getParameter("password");

       username=new String(request.getParameter("username").getBytes("ISO-8859-1"),"utf-8");

       Password=new String(request.getParameter("password").getBytes("ISO-8859-1"),"utf-8");

       response.setContentType("text/html;charset=utf-8");

       PrintWriter  out=response.getWriter();

       out.print("<html>");

       out.print("<head><title>利用Servlet显示调查结果</title></head>");

       out.print("<body>");

       out.print("<h1>");

       out.print("用户名"+username+"<br>");

       out.print("密码:"+Password);

       out.print("</h1>");

       out.print("</body>");

       out.print("</html>");

    }

}

Web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  id="WebApp_ID" version="2.5">

  <display-name>shiyan</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  <servlet>

    <description></description>

    <display-name>SearchServlet</display-name>

    <servlet-name>SearchServlet</servlet-name>

    <servlet-class>cn.edu.qfnu.ch06.servlet.SearchServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>SearchServlet</servlet-name>

    <url-pattern>/SearchServlet</url-pattern>

  </servlet-mapping>

</web-app>

spacer.gif

       6 输入用户名和密码

 

spacer.gif

     7 提交之后显示无乱码结果

spacer.gif

          8提交之后显示乱码现象 

  输入如下代码解决乱码问题:             

String  username=request.getParameter("username");

String  Password=request.getParameter("password");

spacer.gif

          9乱码问题解决之后结果