|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊jsform处置、静态内容和bean通讯
列表4展现了一个详细的JSPJavaBean--LoginJSPBean,用来完成特定的页面处置
列表4。LoginJSPBean
packagelbm.examples;
importlbm.jsputil.*;
importjava.util.*;
publicclassLoginJSPBeanextendsAbstractJSPBean{
publicstaticfinalStringPAGE_CODE="login";
privateString_voterId;
privateString_password;
privateVoter_voter=null;
publicLoginJSPBean(){
}
publicvoidsetVoterId(StringnewVoterId){
_voterId=newVoterId;
}
publicStringgetVoterId(){
if(_voterId==null)return"";
elsereturn_voterId;
}
publicvoidsetPassword(StringnewPassword){
_password=newPassword;
}
publicStringgetPassword(){
if(_password==null)return"";
elsereturn_password;
}
publicVotergetVoter(){
return_voter;
}
protectedvoidbeanProcess()throwsjava.io.IOException{
if(_voterId==null||_voterId.equals("")){
addErrorMsg("Votermustbeentered");
}
if(_password==null||_password.equals("")){
addErrorMsg("Passwordmustbeentered");
}
if(getState()!=ERR){
file://Ifallthefieldsareentered,trytologinthevoter
Votervoter=VoteDB.login(_voterId,_password);
if(voter==null){
addErrorMsg("UnabletoauthenticatetheVoter.Pleasetryagain.");
}
else{
_voter=voter;
if(_voter.getVotedForCandidate()!=null){
//ifthevoterhasalreadyvoted,sendthevotertothelastpage
redirect("confirmation.jsp");
}
else{
//gototheVotepage
redirect("vote.jsp");
}
}
}
}
protectedvoidbeanFirstPassProcess()throwsjava.io.IOException{
}
protectedvoidbeanFooterProcess()throwsjava.io.IOException{
}
protectedStringgetJSPCode(){
returnPAGE_CODE;
}
}
察看LoginJSPBean类中的set和get办法。就象下面说起的,它们用作静态的婚配,而且用来在form字段(request参数)和bean属性间传送值。
列表4中的beanProcess()办法,展现了form处置的一些基础点。这个办法产生在页面输入前,在第二和全体厥后的页面挪用时代实行。这意味着它将仅在用户按下登录按钮而且提交form后实行。
你起首要考证voteId和password的输出,发生的毛病将经由过程addErrorMsg办法纪录上去。这个办法设置AbstractJSPBean类的errorMsg属性。该属性可被JSP用来显现用户的毛病:
<jsp:getPropertyname="_loginJSPBean"property="errorMsg"/>
假如数据的输出乐成经由过程,beanProcess()办法将会挪用数据库来考证用户。最初,它经由过程挪用AbstractJSPBean类中完成的redirect()办法,将哀求重定向到响应的页面。
以下我们将会商VoteJSPBean类中的一些办法。它们将能够注释该架构的一些别的方面,比方JSPJavaBean之间的通讯和使用的流程把持。
列表5。VoteJSPBean类中的beanFirstPassProcess()
protectedvoidbeanFirstPassProcess()throwsjava.io.IOException{
//gettheVoterfromLoginpage
_voter=null;
LoginJSPBeanloginJSPBean=
(LoginJSPBean)getSharedSessionBean().getJSPBean(LoginJSPBean.PAGE_CODE);
if(loginJSPBean!=null){
_voter=loginJSPBean.getVoter();
}
if(_voter==null){
//voterisnotloggedinyet.SendittoLoginpage
setState(NEW);
redirect("login.jsp");
}
}
以上的办法利用了AbstractJSPBean类中_sharedSessionBean对象。SharedSessionBean类经由过程利用一个复杂的办法,让一切的JSPJavaBean对象在一个HTTPsession中举行通讯。它保留有一个session内的全体JSPJavaBean中的一个Map。Map是JavaCollections框架的一个接口,它是Java1.2推出的。对熟习Java1.1的人来讲,它与Hashtable十分相似。一个JSPJavaBean的主键是它的PAGE_CODE,它作为一个常数存储在每一个JSPJavaBean类中。
在这个例子中,beanFirstPassProcess()办法起首定位到LoginJSPBean对象。接着,它由LoginJSPBean对象中失掉Voter对象,而且存储一个到它的援用,以便今后利用。假如Voter为null,这意味着用户没有起首登录就进进Voter页面,因而它重定向到登录页面。这是一个使用流程把持的复杂例子。你能够计划更庞大的办法,比方利用一个智能的调剂程序,不外这些会商已超越了本文的局限。
列表6。VoteJSPBean类的getCandidateList()办法
publicStringgetCandidateList(){
StringBuffercandidateList=newStringBuffer();
Candidatecandidate;
Iteratorcandidates=VoteDB.getCandidates();
while(candidates.hasNext()){
candidate=(Candidate)candidates.next();
candidateList.append("<inputtype=radioname="candidateName"value="");
candidateList.append(candidate.getName());
candidateList.append("">");
candidateList.append(candidate.getName());
candidateList.append("<br>
");
}
returncandidateList.toString();
}
以上的getCandidateList()办法被vote.jsp挪用,经由过程以下的办法:
<jsp:getPropertyname="_voteJSPBean"property="candidateList"/>
依据由数据库失掉的内容分歧,该办法供应分歧的静态HTML内容输入。它必要开辟JavaBean的Java编程者明白一些HTML常识。
你也能够利用一个使用HTML的自力库来格局化HTML,它能够承受一个预界说的输出。比方Iterator,然后以预界说的格局发生HTML输入。另外一个办法是利用标签库。
对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。 |
|