标签:
一、首先用Myeclipse2015创建一个web项目,然后修改index.jsp.
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 6 <title>我的JSP开始页面</title> 7 <meta http-equiv="pragma" content="no-cache"> 8 <meta http-equiv="cache-control" content="no-cache"> 9 <meta http-equiv="expires" content="0"> 10 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 11 <meta http-equiv="description" content="This is my page"> 12 </head> 13 14 <body> 15 <form action="reg" method="get"> 16 <table border="0"> 17 <tr><td colspan="2">添加用户信息</td></tr> 18 <tr><td>姓名:</td><td><input type="text" name="name" value="张道陵"></td></tr> 19 <tr><td>性别:</td><td><input type="text" name="sex" value="男"></td></tr> 20 <tr><td>年龄:</td><td><input type="text" name="age" value="99"></td></tr> 21 <tr><td>信息:</td><td><input type="text" name="info" value="五斗米道教主"></td></tr> 22 <tr><td colspan="2"><input type="submit" value="确认"></td></tr> 23 </table> 24 </form><br> 25 </body> 26 </html>
主要关注表单。其中有默认的value,是为了测试方便。
二、创建Servlet文件reg.java,覆写其中的doGet和doPost方法。
1 package com.kaly.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class reg extends HttpServlet { 12 private static final long serialVersionUID = 1L; 13 14 //无参构造函数 15 public reg() { 16 super(); 17 } 18 19 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 20 //这两句解决中文乱码的问题,在用PrintWriter输出是正常的,请求转发的时候不正常。与Filter冲突,所以不能有过滤器。 21 request.setCharacterEncoding("utf-8"); 22 response.setContentType("text/html);charset=utf-8"); 23 String usernameString=request.getParameter("name"); 24 String sexString=request.getParameter("sex"); 25 String ageString=request.getParameter("age"); 26 String infoString=request.getParameter("info"); 27 PrintWriter out=response.getWriter(); 28 out.print("<html><head><title>调用servlet</title></head><body>"); 29 out.print(usernameString+","+sexString+","+ageString+","+infoString+"."); 30 out.print("</body></html>"); 31 out.flush(); 32 out.close(); 33 34 //下面这些信息,通过请求转发传递之后中文显示乱码。设置过字符集和过滤器都不起作用。 35 // request.setAttribute("username", usernameString); 36 // request.setAttribute("sex", sexString); 37 // request.setAttribute("age", ageString); 38 // request.setAttribute("info", infoString); 39 //如果上面往输出流写了东西,这里请求转发就会出现异常 40 // request.getRequestDispatcher("/index.jsp").forward(request, response); 41 } 42 43 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 44 doGet(request, response);//在doGet和doPost任何一个方法中加上对另一个方法的调用,就可以具备处理两种提交方法的功能 45 } 46 }
其中被注释掉的是调试失败的代码,主要问题是没有处理好中文乱码的问题。而且,如果已经使用了PrintWriter对象向输出流写入了内容,在使用注释掉的那部分代码实现请求转发就会出现“java.lang.IllegalStateException: Cannot forward after response has been committed”的异常。
三、在web.xml中注册servlet,如果是用新建servlet建立的servlet,则Myeclipse会自动建立好相关的注册和映射信息。如果是自定义了一个继承了Servlet的类,则需要手动添加相关信息。
添加下面代码段,其中<servlet-name>节点指定servlet类的引用名称,这个名称将在前端表单action中使用,<servlet-class>节点指定servlet完整的类名。
1 <servlet> 2 <servlet-name>reg</servlet-name> 3 <display-name>reg</display-name> 4 <description></description> 5 <servlet-class>com.kaly.servlet.reg</servlet-class> 6 </servlet>
添加下面代码段,其中<servlet-name>节点是servlet类的引用名称,必须和上面的<servlet-name>节点的值保持一致,<url-pattern>节点指定servlet映射的相对路径,一般在前面都有个"/"。
1 <servlet-mapping> 2 <servlet-name>reg</servlet-name> 3 <url-pattern>/reg</url-pattern> 4 </servlet-mapping>
运行结果如下:
点击"确认"按钮之后。
还没有解决请求转发过程中中文乱码的问题。
标签:
原文地址:http://www.cnblogs.com/xxkalychen/p/4805310.html