仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 610|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA网页编程之利用JavaBean高效处置JSP(2)

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:26:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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:49 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
简单生活 该用户已被删除
板凳
发表于 2015-1-23 23:46:12 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
小女巫 该用户已被删除
地板
发表于 2015-1-31 20:50:31 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
再现理想 该用户已被删除
5#
发表于 2015-2-4 10:51:16 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-9 22:17:22 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
变相怪杰 该用户已被删除
7#
发表于 2015-2-17 08:41:22 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
老尸 该用户已被删除
8#
发表于 2015-2-26 02:32:21 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
小妖女 该用户已被删除
9#
发表于 2015-2-28 20:49:25 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
深爱那片海 该用户已被删除
10#
发表于 2015-3-10 07:56:55 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
蒙在股里 该用户已被删除
11#
发表于 2015-3-17 05:10:30 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
冷月葬花魂 该用户已被删除
12#
发表于 2015-3-17 05:10:31 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
爱飞 该用户已被删除
13#
发表于 2015-3-23 21:36:50 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表