|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
而学习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也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。 |
|