资源描述
实时校验Struts.docx
《实时校验Struts.docx》由会员分享,可在线阅读,更多相关《实时校验Struts.docx(34页珍藏版)》请在冰豆网上搜索。
![实时校验Struts.docx](https://file1.bdocx.com/fileroot1/2022-11/25/a623ade4-e04b-422a-a400-06945d9e15f2/a623ade4-e04b-422a-a400-06945d9e15f21.gif)
实时校验Struts
利用AJAX实现“实时校验”------验证用户注册时的用户名称是否重名的应用
1、验证用户注册时的用户名称是否重名的应用
(1)常规的实现方法
在某个用户注册的应用中,当用户注册时检查用户名是否可用,以前的做法是在旁边加一个按钮,点击“检查”,就向服务器发出请求,然后等待……服务器返回信息,继续操作。
(2)利用Ajax技术来实现以上的操作则不必等待服务器返回信息
用户输入用户名或企业名称的时候,当输入文本框失去焦点(用户的名称输入完毕)的时候,则会自动向服务器发出请求,用户继续做下面的操作,不必点击“检查”,也不必等待服务器返回信息,检查与用户操作是异步的,可同时进行。
当服务器信息返回的时候,会自动在面页相应位置显示返回信息,不必刷新页面,相当于局部刷新的效果。
(3)本例的时序图
1、新建一个Web应用的Project,名称为StrutsAJAXWebApp,同时再添加一个Web组件,其Context的名称为StrutsAJAXWebApp
将产生出下面的状态
2、添加Struts的系统包
3、在Web应用中添加一个包含有注册表单的JSP页面
(1)页面名称为userRegister.jsp
(2)编辑该JSP以添加一个实现注册的表单,并对用户在注册表单中所输入的用户的名称进行实时检查
<%@pagelanguage="java"pageEncoding="GB18030"%>
<%@tagliburi="http:
//struts.apache.org/tags-bean"prefix="bean"%>
<%@tagliburi="http:
//struts.apache.org/tags-html"prefix="html"%>
<%@tagliburi="http:
//struts.apache.org/tags-logic"prefix="logic"%>
<%@tagliburi="http:
//struts.apache.org/tags-tiles"prefix="tiles"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
htmllang="true">
base/>
userRegister.jsp
--
-->
formaction="/register.do"method="post">
hiddenproperty="action"value="2"/>
用户名称:
textproperty="userName"onblur="chkUserName()"style="background:
#FFFFFF"/>
#FF9900;display:
none">
用户密码:
passwordproperty="userPassWord"/>
submitproperty="submitButton"value="提交"disabled="true"/>
form>
html>
4、再添加JavaScript的函数文件common.js
设置编辑器中的编码方式
编程该common.js文件,其内容如下
varhttpRequest;
functionchkUserName()
{
varrequestURL="/StrutsAJAXWebApp/register.do?
userName="+document.all.userName.value;
httpRequest=getHTTPRequestObject();
httpRequest.onreadystatechange=processHttpResponse;
httpRequest.open("GET",requestURL,true);
httpRequest.send(null);
}
functiongetHTTPRequestObject()
{
varhttpRequestObject;
if(window.XMLHttpRequest)
{//Mozilla,Safari,...
httpRequestObject=newXMLHttpRequest();
}
elseif(window.ActiveXObject)
{//IE
try
{
httpRequestObject=newActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
try
{
httpRequestObject=newActiveXObject("Msxml2.XMLHTTP");
}
catch(e2)
{
alert("您的浏览器有问题!
");
}
}
}
returnhttpRequestObject;
}
functionprocessHttpResponse()
{
if(httpRequest.readyState==4)
{
if(httpRequest.status==200)
{
if(httpRequest.responseText!
="")
{//出现错误时
document.getElementById("showStr").style.display="";
document.getElementById("userName").style.background="#FF0000";
document.getElementById("showStr").innerText=httpRequest.responseText;//来自响应的原始数据
document.getElementById("submitButton").disabled=true;
}
else
{//没有出现错误时
document.getElementById("userName").style.background="#FFFFFF";
document.getElementById("showStr").style.display="none";
document.getElementById("submitButton").disabled=false;
}
}
elseif(httpRequest.status==404)
{
alert("没有找到与所请求的文件相匹配的资源!
");
}
else
{
alert("你所请求的页面发生异常,错误代码为:
"+httpRequest.status);
}
}
else
{
document.getElementById("showStr").innerHTML="正在检测用户名称的合法性,请稍等...";
}
}
注意:
中文问题
改变编码
5、添加ActionForm组件
com.px1987.webajax.actionform.RegisterActionForm,registerActionForm,org.apache.struts.action.ActionForm
userPassWord和userName
privateStringuserName;
privateStringuserPassWord;
Stringaction=null;
/*
*GeneratedbyMyEclipseStruts
*Templatepath:
templates/java/JavaClass.vtl
*/
packagecom.px1987.webajax.actionform;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.struts.action.ActionErrors;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionMapping;
/**
*MyEclipseStruts
*Creationdate:
09-21-2007
*
*XDocletdefinition:
*@struts.formname="registerActionForm"
*/
publicclassRegisterActionFormextendsActionForm{
/*
*Generatedfields
*/
/**userNameproperty*/
privateStringuserName;
/**userPassWordproperty*/
privateStringuserPassWord;
Stringaction=null;
/*
*GeneratedMethods
*/
/**
*Methodvalidate
*@parammapping
*@paramrequest
*@returnActionErrors
*/
publicActionErrorsvalidate(ActionMappingmapping,
HttpServletRequestrequest){
//TODOAuto-generatedmethodstub
returnnull;
}
/**
*Methodreset
*@parammapping
*@paramrequest
*/
publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){
//TODOAuto-generatedmethodstub
}
/**
*ReturnstheuserName.
*@returnString
*/
publicStringgetUserName(){
returnuserName;
}
/**
*SettheuserName.
*@paramuserNameTheuserNametoset
*/
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
/**
*ReturnstheuserPassWord.
*@returnString
*/
publicStringgetUserPassWord(){
returnuserPassWord;
}
/**
*SettheuserPassWord.
*@paramuserPassWordTheuserPassWordtoset
*/
publicvoidsetUserPassWord(StringuserPassWord){
this.userPassWord=userPassWord;
}
publicStringgetAction(){
returnaction;
}
publicvoidsetAction(Stringaction){
this.action=action;
}
}
5、添加一个Action以对该表单进行响应和处理
(1)类名称为RegisterAction,包名称为com.px1987.webajax.action
(2)/register
将产生出该Action
(3)编程该Action
packagecom.px1987.webajax.action;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importcom.px1987.webajax.actionform.RegisterActionForm;
importjava.io.*;
publicclassRegisterActionextendsAction
{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
{
RegisterActionFormregisterActionForm=(RegisterActionForm)form;//TODOAuto-generatedmethodstub
Stringaction=request.getParameter("action");
if(action.equals("1"))
{
doGet(request,response);
}
returnmapping.findForward("registerSuccess");
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
{
Stringaction=request.getParameter("action");
if(action.equals("1"))
{
}
StringuserName=request.getParameter("userName");
try
{
userName=newString(userName.getBytes("ISO-8859-1"),"gb2312");
}
catch(UnsupportedEncodingExceptione)
{
//TODO自动生成catch块
e.printStackTrace();
}
StringerrorText=null;
if(userName.equals("yang"))//实际应该改变为查找数据库表来判断有无该用户名存在
{
errorText="对不起,此用户名已经存在,请更换用户名注册!
";
}
else
{
errorText="";
}
response.setContentType("text/html;charset=GBK");
PrintWriterout;
try
{
out=response.getWriter();
out.print(errorText);
out.flush();
}
catch(IOExceptione)
{
//TODO自动生成catch块
e.printStackTrace();
}
}
}
7、添加registerSuccess.jsp
<%@pagelanguage="java"pageEncoding="GB18030"%>
<%@tagliburi="http:
//struts.apache.org/tags-bean"prefix="bean"%>
<%@tagliburi="http:
//struts.apache.org/tags-html"prefix="html"%>
<%@tagliburi="http:
//struts.apache.org/tags-logic"prefix="logic"%>
<%@tagliburi="http:
//struts.apache.org/tags-tiles"prefix="tiles"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
htmllang="true">
base/>
registerSuccess.jsp
--
-->
您的同步的注册请求被正确地处理了!
html>
8、registerSuccess
6、执行该Web页面
(1)再部署该应用
(2)输入http:
//localhost:
8080/StrutsAJAXWebApp/userRegister.jsp
当我们输入用户名称为:
yang时,将出现下面的错误提示内容。
(3)如果所输入的用户名称不是为“yang”,此时的submit按钮将改变为“可用”的状态。
最后进行提交后则出现下面的正确提交的提示。
改进前面的Web应用以实际访问数据库表来获得验证的目标
1、再在本Project中添加一个数据连接接口组件
(1)数据连接组件的接口ConnectDBInterface,包名称为com.px1987.webajax.dao
(2)编程该接口
packagecom.px1987.webajax.dao;
importjava.sql.*;
publicinterfaceConnectDBInterface
{
publicConnectiongetConnection();
publicvoidcloseDBCon();
}
注意:
通过接口可以隐藏实现类中的细节,同时只向上层曝露公共方法。
2、为上面的接口ConnectDBInterface提供一个实现类
(1)类名称为ConnectDBBean,包名称为com.px1987.webajax.dao
(2)编程该ConnectDBBean类
packagecom.px1987.webajax.dao;
importjava.sql.*;
publicclassConnectDBBeanimplementsConnectDBInterface
{
/*下面为采用JDBC-ODBC桥方式
*/
StringJDBC_ODBC_URL="jdbc:
odbc:
WebStudyDSN";
StringJDBC_ODBC_DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
/*下面为采用JDBC-JTDS的驱动连接方式
*/
StringJDBC_JTDS_MSSqlServer_DBDriver="net.sourceforge.jtds.jdbc.Driver";
StringJDBC_MSSqlServer_URL="jdbc:
jtds:
sqlserver:
//127.0.0.1:
1433/WebStudyDB";
privatejava.sql.Connectioncon=null;
publicConnectDBBean()
{
JDBC_ODBC_Connect();
}
publicvoidJDBC_ODBC_Connect()
{
try
{
//Class.forName(JDBC_ODBC_DBDriver);
Class.forName(JDBC_JTDS_MSSqlServer_DBDriver);
}
catch(java.lang.ClassNotFoundExceptione)
{//在此先不考虑异常处理
System.out.println("不能正确地加载J