仓酷云
标题:
JAVA网页编程之利用JavaBean高效处置JSP(2)
[打印本页]
作者:
小魔女
时间:
2015-1-18 11:26
标题:
JAVA网页编程之利用JavaBean高效处置JSP(2)
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,js JSP例子
每一个页面都必需利用指定的布局,以切合全部架构。
列表1。login.jsp
<%@pageimport="lbm.jsputil.*"%>
<jsp:useBeanid="_loginJSPBean"class="lbm.examples.LoginJSPBean"
scope="session"/>
<jsp:setPropertyname="_loginJSPBean"property="*"/>
<%AbstractJSPBean_abstractJSPBean=_loginJSPBean;%>
<%@includefile="includeheader.jsp"%>
<html>
<head><title>VoteLogin</title></head>
<bodybgcolor="white">
<fontsize=4>
PleaseenteryourVoterIDandPassword
</font>
<fontsize="3"color="Red">
<jsp:getPropertyname="_loginJSPBean"property="errorMsg"/>
</font>
<fontsize=3>
<formmethod=post>
VoterID<inputtype=textname=voterIdvalue=<jsp:getProperty
name="_loginJSPBean"property="voterId"/>>
Password<inputtype=passwordname=passwordvalue=<jsp:getProperty
name="_loginJSPBean"property="password"/>>
<inputtype=submitvalue="Login">
</form>
</font>
</body>
</html>
<%@includefile="includefooter.jsp"%>
该JSP页面的架构以下:由几个JSP语句入手下手。接着的HTML代码将没有几JSP指令、语句和剧本等。除几个需要的指令,它们卖力由bean中失掉静态的内容。最初,页面利用了一个JSPinclude指令。
我们会商个中一些主要的JSP语句:
<jsp:useBeanid="_loginJSPBean"class="lbm.examples.LoginJSPBean"scope="session"/>
<jsp:setPropertyname="_loginJSPBean"property="*"/>
以上的代码在JSP和响应的bean间创建了一个毗连。第二个语句显式传送全体的form字段(存储为HTTPrequest参数)到bean中婚配的属性中。代码中利用了bean的setter办法。
<%AbstractJSPBean_abstractJSPBean=_loginJSPBean;%>
<%@includefile="includeheader.jsp"%>
第一个语句让includeheader.jsp可实行共有的处置。第二个语句将includeheader.jsp静态包括出去。要注重到loginJSPBean和_abstractJSPBean如今指向一样的对象,只是带有分歧的接口。
列表2:includeheader.jsp
<%--SettheSharedSessionBean--%>
<jsp:useBeanid="_sharedSessionBean"class="lbm.jsputil.SharedSessionBean"scope="session"/>
<%_abstractJSPBean.setSharedSessionBean(_sharedSessionBean);%>
<%--SetimplicitServletobjects--%>
<%_abstractJSPBean.setRequest(request);%>
<%_abstractJSPBean.setResponse(response);%>
<%_abstractJSPBean.setServlet(this);%>
<%--PerformtheprocessingassociatedwiththeJSP--%>
<%_abstractJSPBean.process();%>
<%--IfgetSkipPageOutputequalsfalse,donotoutputtheJSPpage--%>
<%if(!_abstractJSPBean.getSkipPageOutput()){%>
includeheader.jsp是模板的中心元素之一。一切的JSP页面都利用这个共有的元素。
列表2的前两个语句令分歧页面但在统一HTTPsession中的JSPbean之间相互举行通讯。基础上,每一个JSP将有两个与它联系关系的JavaBean:一个指定的JSPJavaBean(比方,LoginJSPBean)和共有的SharedSessionBean。SharedSessionBean作为一个共有的元素利用,用来毗连一切的页面;我将在前面持续会商它。
includeheader.jsp中接着的三个语句与固有的Servlet对象有关。
<%_abstractJSPBean.setRequest(request);%>
<%_abstractJSPBean.setResponse(response);%>
<%_abstractJSPBean.setServlet(this);%>
JSP标准供应会见JavaServlet标准中的固有对象,比方页面处置中经常使用到的request、response和servlet对象。因而它们被传送到JSPbean。
<%_abstractJSPBean.process();%>
最初,经由过程下面的语句来触发相干JSP页面的处置。你看到我们挪用的是笼统JSPbean上的办法,而不是实类LoginJSPBean上的。为何?我将在以下的部分化释。
使用TemplateMethod计划办法
AbstractJSPBean是TemplateMethod计划的主体。每一个实践的JSPJavaBean都必需承继这个类。
列表3.AbstractJSPBean.java
packagelbm.jsputil;
importjava.util.*;
importjavax.servlet.http.*;
importjavax.servlet.*;
publicabstractclassAbstractJSPBean{
/*constantsusedfor_state*/
publicstaticfinalintNEW=0;
publicstaticfinalintFIRSTPASS=1;
publicstaticfinalintPROC=2;
publicstaticfinalintERR=-1;
privateint_state;//currentstate
privateString_errorMsg;//currentmessagethatisbeingappendedduringvalidation
privateboolean_skipPageOutput;//shouldthepageoutputbeskipped
privateSharedSessionBean_sharedSessionBean;//usedforassociatingtheJSPBeanwiththeHTTPSession
/*standardServletobjectsthatneedtobesetupforeachJSPBean*/
protectedHttpServletRequest_request;
protectedHttpServletResponse_response;
protectedServlet_servlet;
publicAbstractJSPBean(){
setState(NEW);
}
protectedabstractvoidbeanProcess()throwsjava.io.IOException;
protectedabstractvoidbeanFirstPassProcess()throwsjava.io.IOException;
protectedabstractvoidbeanFooterProcess()throwsjava.io.IOException;
protectedabstractStringgetJSPCode();
publicvoidprocess()throwsjava.io.IOException{
setSkipPageOutput(false);//bydefaultdonotskippageoutput.Specificbeanprocess
//methodscanoverrideit.
if(getState()==NEW){
setState(FIRSTPASS);
beanFirstPassProcess();
}else{
resetErrorMsg();
setState(PROC);
beanProcess();
}
//validationthatallcommonfieldshavebeenproperlysetbytheapplication
//thisisactuallycheckingthatthecodehasbeenwrittenproperly
Stringl_err="";
if(_sharedSessionBean==null)l_err=l_err+";SharedSessionBeanmustbeset";
if(_request==null)l_err=l_err+";Requestmustbeset";
if(_response==null)l_err=l_err+";Responsemustbeset";
if(_servlet==null)l_err=l_err+";Servletmustbeset";
if(!l_err.equals(""))thrownewIllegalStateException(l_err);
}
publicvoidfooterProcess()throwsjava.io.IOException{
beanFooterProcess();
}
protectedvoidaddErrorMsg(StringaddErrorMsg){
if(_errorMsg==null)_errorMsg=addErrorMsg;
else_errorMsg=_errorMsg+"<br>
"+addErrorMsg;
setState(ERR);
}
protectedvoidresetErrorMsg(){
_errorMsg=null;
}
publicStringgetErrorMsg(){
if(_errorMsg==null)return"";
elsereturn_errorMsg;
}
protectedvoidsetState(intnewState){
_state=newState;
}
publicintgetState(){
return_state;
}
publicvoidsetSharedSessionBean(SharedSessionBeannewSharedSessionBean){
if(_sharedSessionBean==null){
_sharedSessionBean=newSharedSessionBean;
_sharedSessionBean.putJSPBean(getJSPCode(),this);
}else{
if(_sharedSessionBean!=newSharedSessionBean){
thrownewIllegalStateException("SharedSessionBeanisnotsetproperly.SharedSessionBeanmustbethesameforallPageBeanswithinthesession");
}
}
}
publicSharedSessionBeangetSharedSessionBean(){
return_sharedSessionBean;
}
publicvoidsetSkipPageOutput(booleannewSipPageOutput){
_skipPageOutput=newSipPageOutput;
}
publicbooleangetSkipPageOutput(){
return_skipPageOutput;
}
protectedvoidredirect(StringredirectURL)throwsjava.io.IOException{
//skipthepageoutputsinceweareredirecting
setSkipPageOutput(true);
_response.sendRedirect(redirectURL);
}
publicvoidsetRequest(HttpServletRequestnewRequest){
_request=newRequest;
}
publicvoidsetResponse(HttpServletResponsenewResponse){
_response=newResponse;
}
publicvoidsetServlet(ServletnewServlet){
_servlet=newServlet;
}
}
AbstractJSPBean包括有以下的笼统办法:beanFirstPassProcess(),beanProcess(),andbeanFooterProcess()。这些办法被称为primitive办法。你必需在实践的JSPJavaBean子类中完成它们。每一个都在JSP处置的一个特定阶段中实行。
beanFirstPassProcess()--在页面被初次挪用时举行的处置,它产生在页面入手下手输入之前。它合适用来初始化静态的内容和考证对页面的会见。可拜见VoteJSPBean中该办法的完成,该Bean顶用它来考证页面的会见,而且举行使用的流程把持。
beanProcess()--产生在第二和厥后的页面挪用时代的处置,在页面输入入手下手之前。你能够用它来作HTMLform考证和数据库更新。在LoginJSPBean类中,该办法被用作HTMLform处置,在VoteJSPBean类中,用来保留信息到数据库中。
beanFooterProcess()--在页面输入完成落后行的处置。你可使用它来令session有效。在ConfirmationJSPBean类中,当投票完成后,经由过程完成该办法令session有效,而且显现确认的页面。
接着我们将看一下process()办法:
publicvoidprocess()throwsjava.io.IOException{
setSkipPageOutput(false);//bydefaultdonotskippageoutput.Specificbeanprocess
//methodscanoverrideit.
if(getState()==NEW){
setState(FIRSTPASS);
beanFirstPassProcess();
}else{
resetErrorMsg();
setState(PROC);
beanProcess();
}
....
process()起首反省JSP的形态;然后,依据形态,它挪用响应的primitive办法。它还设置了JSP响应的形态。
process()和footerProcess()办法被称为template办法。它们由JSP中真正挪用(在includeheader.jsp和includefooter.jsp中)。实体的bean不该该掩盖它们。template办法包括有共有的框架算法。一个典范模板办法的框架算法实行一个共有的处置,而且挪用primitive(笼统)办法(beanFirstPassProcess()、beanProcess()和beanFooterProcess()),这些办法的完成在每一个实践的JSPJavaBean中都是分歧的。框架算法也能够称为AbstractJSPBean中完成的实体办法。以上的划定规矩是TemplateMethod计划办法的基础点。
这类办法的优点是:
1、经由过程在模板办法平分解出共有的处置,你能够做到代码重用
2、你能够对全部使用举行共有的计划和处置
除处置逻辑外,AbstractJSPBean还包括有以下详细的办法来匡助子类(实践的JSPJavaBean)来完成它们的处置义务,你不该该掩盖这些实践的办法。
1、与用户毛病办理相干的办法(addErrorMsg(),resetErrorMsg(),andgetErrorMsg())
2、与页面形态办理相干的办法(setState(),getState())
3、办理与SharedSessionBean联系关系的办法
4、把持JSP页面的HTML部分是不是输入的办法(setSkipPageOutput(),getSkipPageOutput())
5、重定向的办法
6、会见Servlet对象的办法:request,response和servlet
恰恰证明了java的简单,要不怎么没有通过c/c++来搞个这种框架?
作者:
莫相离
时间:
2015-1-18 23:08
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
简单生活
时间:
2015-1-23 23:46
Java 编程语言的风格十分接近C、C++语言。
作者:
小女巫
时间:
2015-1-31 20:50
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者:
再现理想
时间:
2015-2-4 10:51
是一种使网页(Web Page)产生生动活泼画面的语言
作者:
愤怒的大鸟
时间:
2015-2-9 22:17
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
变相怪杰
时间:
2015-2-17 08:41
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者:
老尸
时间:
2015-2-26 02:32
Java 编程语言的风格十分接近C、C++语言。
作者:
小妖女
时间:
2015-2-28 20:49
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
深爱那片海
时间:
2015-3-10 07:56
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者:
蒙在股里
时间:
2015-3-17 05:10
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
冷月葬花魂
时间:
2015-3-17 05:10
Java 编程语言的风格十分接近C、C++语言。
作者:
爱飞
时间:
2015-3-23 21:36
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2