您的位置:首页 > Web前端 > JavaScript

JSP应用的自我理解之三:JSP+Servlet实现表单验证

2014-04-06 17:55 369 查看
示例说明:通过一个表单提交页面提交给Servlet,Servlet获取信息,经过处理后,将信息存入request对象中,如果用户提交姓名为空,将重新返回登录首页,否则,把提交的信息全部显示出来

下面具体实现了~~

1、新建一个Dynamic WEB工程,名为formtt



2、新建一个登录界面index.jsp,完成登录界面的编写,具体代码如下:

<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!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=GBK">
<title>表单提交</title>
</head>
<body><br/>
<form id="form1" name="form1" method="post" action="test">
<p align="center"><strong>表单提交</strong></p>
<table width="331" height="147" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="76" height="35">username:</td>
<td width="183"><label>
<input type="text" name="name" id="textfield"  height="20"/>
</label></td>
<td width="50"> </td>
</tr>
<tr>
<td>sex:</td>
<td><input type="radio" name="sex" value="boy"/>boy<input type="radio" name="sex"  value="girl"/>girl</td>
<td> </td>
</tr>
<tr>
<td>address:</td>
<td><input type="text" name="address" id="textfield3" height="20"/></td>
<td> </td>
</tr>
<tr>
<td>likes:</td>
<td><label>
<input type="checkbox" name="likes" id="checkbox" value="sing" />sing
<input type="checkbox" name="likes" id="checkbox2"  value="dance"/>dance
<input type="checkbox" name="likes" id="checkbox3"   value="game"/>game
</label></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input name="" type="submit" value="submit" />
<input name="" type="reset" value="reset" /></td>
<td> </td>
</tr>
</table>
</form>

</body>
</html>
具体的界面如下:



3、在服务器端建立一个包org.luojs.servlet,然后在该包下新建一个TestServlet的Java类,完成服务器端对表单的处理

具体代码如下:

package org.luojs.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 TestServlet extends HttpServlet{
public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取表单信息
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String address = request.getParameter("address");
String[] likes = request.getParameterValues("likes");
String URL = "index.jsp";
String likes2 = "";
if (null != likes) {
for (String string : likes) {
likes2 += string + "  ";
}
}
if (null != name && !name.equals("")) {
// 把从页面获取的内容放入request中
request.setAttribute("name", name);
request.setAttribute("sex", sex);
request.setAttribute("address", address);
request.setAttribute("likes", likes2);
URL = "result.jsp";
}
request.getRequestDispatcher(URL).forward(request, response);
}
public void init() throws ServletException {
}

}


4、配置web.xml文件

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

<web-app 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_3_0.xsd" version="3.0"
metadata-complete="true">

<!-- 注册servlet信息 -->
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>org.luojs.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>


5、跑一跑试试看,发现还行,



但输入中文文字时,出现的是乱码



所以,你要用filter监听器技术来实现中文乱码解决的问题~~

(1)在org.luojs.servlet包下新建一个CharaterEncoding的Java类,具体代码如下:

package org.luojs.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncoding implements Filter{
private FilterConfig config;

//此filter被释放时的回调方法
public void destroy() {	}

//主要做过滤工作的方法
//FilterChain用于调用过滤器链中的下一个过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//获取此Filter的初始参数的值
String encoding = config.getInitParameter("encoding");

if(null != encoding && !"".equals(encoding)){
request.setCharacterEncoding(encoding);  //设置请求数据的编码方式
}

//把请求和响应对象传给过滤链中的下一个要调用的过滤器或Sevlet
chain.doFilter(request, response);
}

//些filter初始化时的回调方法
//FilterConfig接口实例中封装了这个Filter的初始化参数
public void init(FilterConfig config) throws ServletException {
this.config = config;
}

}


(2)在web.xml中加入如下代码:

<!-- 解决中文乱码问题 -->
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>org.luojs.servlet.CharacterEncoding</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping
a375
>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


然后,你再跑跑,看到中文字符了,差不多了~~



参考书目:《JSP基础与案例开发详解》,清华大学出版社
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息