JAVA网页编程之JBuilder2005实战JSP之切换把持
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践!js|把持因为在login.jsp的表单中经由过程action属性指定switch.jsp为呼应的JSP文件,当用户在login.jsp当选定登任命户,输出暗码提交表单后,客户端将向服务器发送一个HTTP哀求,服务器即挪用switch.jsp来呼应这个哀求。表单顶用户名和暗码两组件的数据将经由过程HTTP哀求传给服务器的switch.jsp,服务器将这些信息封装在request对象中传给switch.jsp,以是switch.jsp可经由过程request.getParameter(StringparaName)来猎取这两个值。
StringuserId=request.getParameter("userId");
Stringpassword=request.getParameter("password");
试想假如login.jsp的表单有10个以上的数据组件,则在switch.jsp中必需经由过程响应数量的request.getParameter()办法猎取其值。别的,假如这些数据不是字段串范例,而是整数或浮点数,因为request.getParameter()办法前往的值都是String,还必需举行范例的转换,这类事情不仅单调有趣,还简单堕落。
JSP同意你经由过程Bean以映照的体例吸收网页表单的数据,Bean以这个划定规矩映照表单的数据:Bean属性名=表双数据组件名,也即一切和Bean属性名不异的表双数据域被主动添补到Bean中,而且完成数据范例的转换。如login.jsp的表单中有两个数据组件,一个名为userId,另外一个是password,界说一个具有不异名的userId和password属性的User.javaBean,这个Bean将能够主动吸收表单中的两个数据组件值。
编写User.java
我们先来编写这个User.java的Bean,在工程中创立User.java,其代码以下所示:
代码清单7User.java
1.packagebookstore;
2.
3.publicclassUser
4.{
5.privateStringuserId;//用户Id
6.privateStringpassword;//暗码
7.privateStringuserName;//用户名
8.publicStringgetPassword(){
9.returnpassword;
10.}
11.publicStringgetUserId(){
12.returnuserId;
13.}
14.publicStringgetUserName(){
15.returnuserName;
16.}
17.publicvoidsetPassword(Stringpassword){
18.this.password=password;
19.}
20.publicvoidsetUserId(StringuserId){
21.this.userId=userId;
22.}
23.publicvoidsetUserName(StringuserName){
24.this.userName=userName;
25.}
26.}
除userId和password两属性名,另有一个用户名属性userName,这个属性的值不是从login.jsp的表单吸收的,当用户名暗码考证准确后,从数据表T_USER表中猎取用户名保留在这个属性中,以便其他中央援用,保留并编译这个类。
提醒:
你能够经由过程JBuilder的BeanExpress工具疾速创立User.java的代码,在一样平常情形下,你应当经由过程BeanExpress来创立Bean的属性,如许不仅主动发生get/set的属性会见办法,还包管了Bean定名标准。编写页面程序
在创立User.java的Bean后,我们动手创立switch.jsp,在switch.jsp中援用这个Bean。
经由过程File->New..->Web->双击JSP图标启动创立JSP导游。
1.指定swith.jsp名字
0指定switch.jsp的名字
一向按Next到导游的第3步。
2.援用User.javaBean
1指定JSP中援用Bean
点击AddBean...按钮,弹出SelectaClass对话框,在对话框当选择bookstore.User类,以下图所示:
2选择类作为Bean
按OK后,前往到导游第3步的对话框,此时对话框的Bean列表中多了一行纪录,能够在ID栏中为Bean指定一个名字,在Scope中指定Bean的感化域,以下图所示:
3援用一个Bean
我们为User的Bean取名为userBean,将其感化域设置为page域。page域即为页面感化域,在以后页面局限感化域内可用,当JSP前往呼应,或哀求转到其他的JSP页面中时,都不成用了,其他3个感化域申明以下:
・request感化域:当一个哀求发生直到前往呼应的局限内都是无效的,如a.jsp中声明为request感化域的Bean,当a.jsp经由过程<jsp:forward>转移哀求到b.jsp页面中时仍是可用的。
・session感化域:在用户会话的周期内都是可用的,会话周期为用户登录体系直到其加入体系为此。
・application感化域:这个感化域最长,暗示Web容器启动直到封闭都是无效的。
按Next到下一步。
3.设置运转设置项
在导游的最初一步,你能够为创立的JSP发生一个运转设置项,固然导游将创立一个运转设置项设置为默许选项,但笔者以为这并非一个公道的默许值,倡议作废createaruntimeconfiguration设置项,不要创立JSP的运转设置项,以下图所示:
按Finish按钮创立switch.jsp文件,其代码以下所示:
代码清单8导游创立的switch.jsp
1.<%@pagecontentType="text/html;charset=GBK"%>
2.<html>
3.<head>
4. <title>
5. switch
6. </title>
7.</head>
8.<jsp:useBeanid="userBean"scope="page"class="bookstore.User"/>
9.<jsp:setPropertyname="userBean"property="*"/>
10.<bodybgcolor="#ffffff">
11. <h1>
12. JBuilderGeneratedJSP
13. </h1>
14.</body>
15.</html>
第8行是援用Bean的JSP标签,第9行用表单的数据添补Bean的属性值,即以名字婚配的体例将request的参数添补到Bean的属性中,同时完成范例转换(只要基础数据范例或机关函数撑持的才能够完成转换)。在实行完第9行后,userBean中的userId和password属性将被设置为login.jsp页面中所发送过去的用户名和暗码的值。
由于switch.jsp只是用于把持,其实不必要显现内容到客户端,以是我们往除switch.jsp中的HTML代码,将switch.jsp调剂为:
代码清单9往除静态HTML代码后的switch.jsp
1.<%@pagecontentType="text/html;charset=GBK"%>
2.<jsp:useBeanid="userBean"scope="page"class="bookstore.User"/>
3.<jsp:setPropertyname="userBean"property="*"/>
在switch.jsp中供应一段Scriptlet,将userId和password发送到数据库和T_USER表中的用户对照看是不是是正当的用户,依据考证的了局转向分歧的页面。switch.jsp的终极代码以下所示:
代码清单10终极的switch.jsp
1.<%@pagecontentType="text/html;charset=GBK"%>
2.<%@pageimport="bookstore.*"%>
3.<%@pageimport="java.sql.*"%>
4.<jsp:useBeanid="userBean"scope="session"class="bookstore.User"/>
5.<jsp:setPropertyname="userBean"property="*"/>
6.<%
7.Connectionconn=null;
8.try{
9. conn=DBConnection.getConnection();
10. PreparedStatementpStat=conn.prepareStatement(
11. "selectUSER_NAMEfromT_USERwhereUSER_ID=?andpassword=?");
12. pStat.setString(1,userBean.getUserId());
13. pStat.setString(2,userBean.getPassword());
14. ResultSetrs=pStat.executeQuery();
15. if(rs.next()){//暗码准确
16. userBean.setUserName(rs.getString(1));//设置用户名
17. session.setAttribute("ses_userBean",userBean);//将userBean放进Session对象中
18.%><jsp:forwardpage="welcome.jsp"></jsp:forward>
19.<%}else{//暗码毛病%>
20.<jsp:forwardpage="fail.jsp"></jsp:forward>
21.<%
22. }}finally{
23. if(conn!=null)conn.close();
24. }
25.%>
・在第2~3行中引进Scriptlet代码中必要的类。
・第7~14行代码向数据库发送查询SQL语句并前往了局。
・第15行经由过程反省了局集的纪录数直接判别用户暗码是不是准确。
・第16~18行是用户暗码准确的呼应代码,起首用了局集的USER_NAME属性添补userBean的userName属性值,然后将userBean对象放进Session中,最初转向welcome.jsp页面。
・当用户输出暗码不准确时,了局会合将没有纪录,此时rs.next()前往false,程序转向第20行,第20行的代码将页面转向到暗码输出毛病的处置页面fail.jsp。
・第22~24行的代码用于封闭数据库的毗连。
大概人人已发明固然第9~21行会抛出SQLException非常,但我们并没有响应的非常捕捉块,在尺度的Java程序中将招致一个编译期的毛病,但在JSP中却能够按次经由过程编译,这是由于JSP页面自己会捕捉页面中抛出的一切非常。
假定第11行的SQL查询语句产生有毛病,如将用户表名误写为User(准确为T_USER),当switch.jsp被挪用后,第14即将抛出SQLException非常,此时switch.jsp将显现出非常仓库迹的跟踪信息页面,以下图如示:
4可骇的毛病处置页面
上图所示的毛病处置页面可谓青面獠牙,脸孔狰狞,十分不友爱,关于开辟职员来讲这类报错页面大概是合适的,由于它供应了很多毛病跟踪信息,但终极用户是不成能承受这类粗暴的堕落页面的。JSP同意你经由过程<%@pageerrorPage%>为页面指定一个专门处置毛病的JSP页面,以便用一种友爱、直不雅的情势展示毛病。鄙人一节里,我们将创立一个用于处置毛病的JSP页面,在创立以后,我们再来为switch.jsp指定毛病处置JSP页面。
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种将安全性(Security)列为第一优先考虑的语言 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 Java是一种计算机编程语言,拥有跨平台、面向对java http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
页:
[1]