JBuilder2005实战JSP之切换控制 图文步骤

表单中用户名和密码两组件的数据将通过HTTP请求传给服务器的switch.jsp,服务器将这些信息封装在request对象中传给switch.jsp,所以switch.jsp可通过request.getParameter(String paraName)来获取这两个值。


代码如下:

String userId = request.getParameter("userId");
String password = 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.java Bean,这个Bean将可以自动接收表单中的两个数据组件值。

  编写User.java

  我们先来编写这个User.java的Bean,在工程中创建User.java,其代码如下所示:

  代码清单 7 User.java


代码如下:

package bookstore;

public class User
{
private String userId;//用户Id
private String password;//密码
private String userName;//用户名
public String getPassword() {
return password;
}
public String getUserId() {
return userId;
}
public String getUserName() {
return userName;
}
public void setPassword(String password) {
this.password = password;
}
public void setUserId(String userId) {
this.userId = userId;
}
public void setUserName(String userName) {
this.userName = userName;
}
}

  除userId和password两属性名,还有一个用户名属性userName,这个属性的值不是从login.jsp的表单接收的,当用户名密码验证正确后,从数据表T_USER表中获取用户名保存在这个属性中,以便其他地方引用,保存并编译这个类。

  提示:

  你可以通过JBuilder的Bean Express工具快速创建User.java的代码,在一般情况下,你应该通过Bean Express来创建Bean的属性,这样不但自动产生get/set的属性访问方法,还保证了Bean命名规范。

  编写页面程序

  在创建User.java 的Bean后,我们着手创建switch.jsp,在switch.jsp中引用这个Bean。

  通过File->New..->Web->双击JSP图标启动创建JSP向导。

1.指定swith.jsp名字


图 10 指定switch.jsp的名字

  一直按Next到向导的第3步。

  2.引用User.java Bean


图 11 指定JSP中引用Bean

  点击Add Bean...按钮,弹出Select a Class对话框,在对话框中选择bookstore.User类,如下图所示:


图 12 选择类作为Bean

  按OK后,返回到向导第3步的对话框,此时对话框的Bean列表中多了一行记录,可以在ID栏中为Bean指定一个名字,在Scope中指定Bean的作用域,如下图所示:


图 13 引用一个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产生一个运行配置项,虽然向导将创建一个运行配置项设置为默认选项,但笔者认为这并不是一个合理的默认值,建议取消create a runtime configuration设置项,不要创建JSP的运行配置项,如下图所示:



  按Finish按钮创建switch.jsp文件,其代码如下所示:

  代码清单 8 向导创建的switch.jsp


代码如下:

<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
 <title>
  switch
 </title>
</head>
<jsp:useBean id="userBean" scope="page" class="bookstore.User" />
<jsp:setProperty name="userBean" property="*" />
<body bgcolor="#ffffff">
 <h1>
  JBuilder Generated JSP
 </h1>
</body>
</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


代码如下:

<%@ page contentType="text/html; charset=GBK" %>
<jsp:useBean id="userBean" scope="page" class="bookstore.User" />
<jsp:setProperty name="userBean" property="*" />

  在switch.jsp中提供一段Scriptlet,将userId和password发送到数据库和T_USER表中的用户比较看是否是合法的用户,根据验证的结果转向不同的页面。switch.jsp的最终代码如下所示:

  代码清单 10 最终的switch.jsp


代码如下:

<%@page contentType="text/html; charset=GBK"%>
<%@page import="bookstore.*"%>
<%@page import="java.sql.*"%>
<jsp:useBean id="userBean" scope="session" class="bookstore.User"/>
<jsp:setProperty name="userBean" property="*"/>
<%
Connection conn = null;
try {
 conn = DBConnection.getConnection();
 PreparedStatement pStat = conn.prepareStatement(
  "select USER_NAME from T_USER where USER_ID=? and password = ?");
 pStat.setString(1, userBean.getUserId());
 pStat.setString(2, userBean.getPassword());
 ResultSet rs = pStat.executeQuery();
 if (rs.next()) { //密码正确
  userBean.setUserName(rs.getString(1));//设置用户名
  session.setAttribute("ses_userBean", userBean);//将userBean放入Session对象中
%><jsp:forward page=" welcome.jsp "></jsp:forward>
<%} else { //密码错误%>
<jsp:forward page="fail.jsp"></jsp:forward>
<%
  }} finally {
   if(conn != null) conn.close();
  }
%>

  ·在第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将显示出异常堆栈迹的跟踪信息页面,如下图如示:


图 14 可怕的错误处理页面

  上图所示的错误处理页面可谓青面獠牙,面目狰狞,非常不友好,对于开发人员来说这种报错页面也许是适合的,因为它提供了许多错误跟踪信息,但最终用户是不可能接受这种粗野的出错页面的。JSP允许你通过<%@ page errorPage%>为页面指定一个专门处理错误的JSP页面,以便用一种友好、直观的形式展现错误。在下一节里,我们将创建一个用于处理错误的JSP页面,在创建之后,我们再来为switch.jsp指定错误处理JSP页面。

(0)

相关推荐

  • JBuilder2005实战JSP之切换控制 图文步骤

    表单中用户名和密码两组件的数据将通过HTTP请求传给服务器的switch.jsp,服务器将这些信息封装在request对象中传给switch.jsp,所以switch.jsp可通过request.getParameter(String paraName)来获取这两个值. 复制代码 代码如下: String userId = request.getParameter("userId"); String password = request.getParameter("passw

  • JBuilder2005实战JSP之登录页面实现代码[图]

    通过File->New...->Web->双击JSP图标,弹出创建JSP向导的对话框,如下图所示: 图 3 通过向导创建login.jsp ·Web module:如果一个工程下有多个Web模块,你可以通过这儿指定JSP所要加入到的Web模块,因为我们的工程中只有一个webModule,所以是向导将默认设置为webModule. ·Name :键入JSP文件名,你可以键入.jsp后缀,也可以不写后缀,直接键入login就可以了. Generate sample bean选项勾选后JBui

  • springboot实战权限管理功能图文步骤附含源码

    目录 前言 功能清单 功能介绍 菜单管理 资源管理 角色管理 后台用户管理 动态菜单控制 动态资源控制 项目源码地址 前言 mall项目的权限管理功能发布啦!权限管理作为后台管理系统的必要功能,mall项目之前的权限管理并不完善.最近我对原先的权限管理进行了重新设计,打造了一套切实可用的权限管理功能. 功能清单 菜单管理:可以实现对后台管理系统左侧菜单的管理,支持更换图标.更换名称.控制菜单显示和排序: 资源管理:实现了基于访问路径的后台动态权限控制,控制的权限可以精确到接口级别: 角色管理:可

  • Laravel快速入门之composer介绍及安装详细图文步骤

    1. 安装Laravel前准备工作 Laravel 需要php5.6以上的版本 ,为了快速搭建环境 , 推荐安装 phpStudy 集成环境,可以快速切换php版本跟 apache/nginx. 下载Laravel框架我们使用Composer 官网: https://laravel.com/ 中文官网: http://www.golaravel.com/ 中文社区: https://laravel-china.org/ 2.什么是composer? composer 英文单词的意思 : 作曲者,

  • Windows Server 2016快速入门部署远程桌面服务的详细图文步骤

    现在2016服务器比win2008与2012支持多站点https服务,下面我们小编就为大家分享一下 打开服务器管理器,然后单击管理 -> 添加角色和功能 在" 开始之前"页面上的向导中,单击"下一步". 在" 选择安装类型"页面上,选择" 远程桌面服务安装",再 单击"下一步". 在" 选择 部署类型"页面上,选择" 快速入门" ,然后单击"下一步&q

  • Rancher通过界面管理K8s平台的图文步骤详解

    目录 一.Rancher 简介 1.Rancher API Server 的功能 2.Rancher 主要组件和功能图示 二.Rancher 安装 1.通过 Docker 来进行安装 2.在 Rancher 的界面上绑定 K8s 3.在 Rancher 上部署应用 一.Rancher 简介 Rancher 是为使用容器的公司打造的容器管理平台,通过 Rancher,企业不再需要使用一系列开源软件从零开始构建一个容器服务平台.同时 Rancher 还提供了一个全栈容器部署和管理平台,用于管理 Do

  • Win7彻底卸载Oracle 11g图文步骤(靠谱)

    网上资料结合自己的操作整理出的一套靠谱的彻底卸载Oracle 11g的步骤!(Win7),具体内容详情如下所示: 1:停掉所有Oracle相关的服务 1.1打开服务方式如下: 1.1.1:右击"计算机"–>管理–>服务和应用程序–>服务 1.1.2:开始–>输入"服务"后点击搜索–>点击服务 1.2 关闭服务(以Oracle打头的,比如OracleDBConsoleorcl). 2:卸载oracle 11g客户端 开始–>所有程序

  • visual studio2019的安装以及使用图文步骤详解

    一.下载安装包 下载地址 选择visual studio 2019的community版本 二.下载好后运行 三.组件的选择 如果是用来学C\C++的话,选择以下两个就够了 之后如果还需要其他一些功能的话,可以后续在进行添加.打开visual studio Installer,进入修改 四.进行安装 如果不需要修改安装位置的话点击安装就可以了.不过由于vs2019占用的空间较大最好不要装在C盘.可以在安装位置修改安装的路径. 五.VS2019的使用创建一个project 选择创建一个空项目.这里

  • IntelliJ IDEA创建maven web项目的图文步骤(IDEA新手适用)

    PS:从eclipse刚转到IDEA,对于这个陌生的工具我表示无言,但听说很好用,也就试试,结果我几乎花了一晚上的时间才搭起来maven web项目,觉得在此给各位一个搭建maven web项目的教程,指出我踩过的各种坑! 步骤一:首先先创建一个project,在这里就是创建一个maven的工作空间 步骤二:按照下面的步骤操作就可以了,最后next 首先,选择左边的maven 然后在右边Creater from archetype选项前面打个勾, 最后选择maven-archetype-weba

  • 简单搭建VMware ESXi6.7(图文步骤)

    一.VMware vSphere简介 VMware vSphere 是业界领先且最可靠的虚拟化平台.vSphere将应用程序和操作系统从底层硬件分离出来,从而简化了 IT操作. 您现有的应用程序可以看到专有资源,而您的服务器则可以作为资源池进行管理.因此,您的业务将在简化但恢复能力极强的 IT 环境中运行. vSphere 是VMware公司推出一套服务器虚拟化解决方案,目前的最新版本为6.7,其核心组件为 VMware ESXi 和VMware vCenter. VMware ESXi 6.7

随机推荐