您的位置:首页 > 其它

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

2014-05-27 21:35 429 查看
实验内容: 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第一次请求时:

图 1
再次请求时输出结果:


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


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


图 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结果如下:

图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="提交"/>  
<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>


图 6 输入用户名和密码

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

图 8提交之后显示乱码现象
输入如下代码解决乱码问题:
String username=request.getParameter("username");
String Password=request.getParameter("password");



图 9乱码问题解决之后结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐