友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

JSP入门教程(DOC格式)-第7部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


forward 跳转到 list。jsp。  



  

  



第一行是我们曾经讲过的设置中文编码。第二行叫做 jsp action (jsp 动作), 

它的写法和 html 标签很相像,有了它们我们可以节省很多 java 代码。比如,这 

个 jsp 动作就与下面的代码功能相同。  



  



从长度来看,jsp 动作明显占有绝对优势,在单独使用 forward 的时候,建议大 

家优先考虑的写法。  



                                      45 / 148  


…………………………………………………………Page 46……………………………………………………………

                                    



现在来看 list。jsp 里的内容,我们是如何获得这些联系信息,并把这些联系信 

息显示到页面上。  



为了便于操作,我们将所有对数据库的操作都封装到 anni。ContactDao 中,这就 

是所谓的 javabean 了。现在我们想要获得所有联系信息时,只要创建一个 

ContactDao 的实例,然后调用 contactDao。getAll()获得装满联系信息的 List 

列表就好了。  



在创建 ContactDao 实例的时候,我们使用了另一个 jsp 动作:jsp:useBean,它 

就写在 list。jsp 的第二行。  



  



看到这里,可能有朋友提问了,既然只是创建一个对象的实例,为什么不用 new 

呢,那要比这样写的代码少许多,也更容易理解,为什么我们还要执意使用 

jsp:useBean?只是为了尝试新技术吗?  



这里我提醒大家注意一下标签中的 scope=〃application〃,application 正是我 

们介绍过的四个作用域之一,既然有了这个属性就说明事情没有 new 这么简单 

了,实际上正因为 scope 的属性,这段 jsp:usebean 实际上等价于下面的代码。  



  



它会先去 scope 定义的作用域 application 中取得 contactDao 对应的对象,这 

个 contactDao 正是标签中定义的 id,转换的对象类型则是标签中 class 属性的 

值。  



好的,我们先从 application 中获得 contactDao 对应的对象,然后判断得到的 

是否为 null,如果为 null 说明此变量还没有初始化,这时就要使用 new 创建一 

个对象实例并放入 application 中。最后我们得到的就是这个 contactDao 实例。  



现在我们得到了一个 contactDao 实例,并把它放到 application 作用域中,供 

所有用户公用,通过使用 jsp:useBean,我们下面就可以直接使用它获得需要的 

数据。  



  

                  

                    {contact。username}  

                    {contact。sex}  

                    {contact。email}  

                    {contact。qq}  

                    {contact。descn}  

                    修改 |  

删除  

                  

  



首先我们调用 contactDao。getAll()获得联系信息的 List 列表,然后使用 for 

循环将这些信息都输出到页面。  



下面的操作比较有趣,我们每获得一条信息就把它放入 pageContext 中。之所以 

这样做,是为了在下面使用 el 表达式显示信息。  



el 表达式的一个特点就是必须放到作用域里才能调用,如果使用 Contact  

contact = (Contact) list。get(i);而不放到 pageContext 中,后面的 

{contact。username}就无法找到 contact 了。  



这里还要提及 el 表达式的进一步用法,{contact。username}实际上得到的是 

contact。getUsername()返回的结果。这里有一个默认的转换规则,假设有一个 

getUsername()方法,我们先要去掉开头的 get,然后将 get 后的那个字母小写, 

得到的 username 就是与 el 表达式中对应的部分。  



有趣的是{contact。username}仅仅与 getUsername()方法对应,无论 contact 

有没有 String username 这个变量。如果我们想使用{contact。nameAndSex}, 

只要写一个 public String getNameAndSex()方法返回我们想要的数据即可,不 

需要添加 String nameAndSex;变量。  



另一个放到 pageContext 中的row 就很直观了,我们根据行数的奇偶来决定当前 

行使用的 css 样式,这样就可以显示出斑马线的效果了,这项功能并非必要,只 

是为了娱乐。  



                                    47 / 148  


…………………………………………………………Page 48……………………………………………………………

                                                     



5。3。 Create(创建)  



选择 list。jsp 中的“添加联系信息”,即进入 create。jsp 添加信息页面。  



                                                                                                     



create。jsp 中没有包含 java,它提供给用户一个输入信息的表单,用户填写过 

信息后就能点击提交按钮,将数据提交给 save。jsp 处理。  



                                                                                                    



save。jsp 中与 create。jsp 相反,里边只有处理数据的 java 代码,没有显示的 

内容。  



  

  

  

  



jsp:useBean 的用处我们已经了解了,先从application 中取出 contactDao,再 

创建一个 contact。在创建 contact 的时候没有指定 scope,默认情况下只会使 

用 new 创建这个局部变量,不会对任何作用域产生影响。  



jsp:setProperty 是新事物了,它的作用就是为某个 javabean 设置数据。之前 

我们已经使用 jsp:useBean 创建了一个 contact 实例,现在我们通过 

name=〃contact〃设置这个实例的数据,property 可以指定一个属性,比如 

property=〃username〃,也可以使用星号(* )批量设置所有可以找到的属性,这 

个 jsp 动作实际上与下面的代码等价。  



contact。setUsername(request。getParameter(〃username〃));  

contact。setSex(request。getParameter(〃sex〃));  

contact。setEmail(request。getParameter(〃email〃));  

contact。setQq(request。getParameter(〃qq〃));  

contact。setDescn(request。getParameter(〃descn〃));  



这些数据都是由 create。jsp 提交过来的,只要它们的名称与 contact 中的方法 

对应(这次是 set 开头的方法了),jsp:setProperty 就可以自动为它们进行赋 

值,转换的规则与 get 的方法名是类似的。  



通过这一系列的 jsp 动作,我们得到的 contact 中已经设置好了用户刚刚填写的 

数据,现在只要进行保存就好了。  



contactDao。save(contact);  

response。sendRedirect(〃list。jsp〃);  



contactDao。save()也已经封装好了,直接调用便完成添加功能。操作完成后记 

得要调用 sendRedirect,将页面重定向到 list。jsp,查看添加后的结果。  



                                                                              



                                      49 / 148  


…………………………………………………………Page 50……………………………………………………………

                                             



5。4。 Update(更新)  



点击列表右侧的“修改”,对这一行显示的联系信息进行修改。  



                                                                                     



虽然页面的布局与 create。jsp 基本相同,但为了预先显示需要修改的数据,我 

们需要根据请求中的 id 值,去数据库中查找对应的联系信息,再显示到 jsp 中。  



点击“修改”的时候,id 便附加到 url 后了。  



修改  



edit。jsp 中获得 id 的值,根据 id 从 contactDao 获得对应的联系信息 contact, 

再将 contact 放到 pageContext 供后面的 el 表达式使用。  



  

  



在 html 中显示信息的时候,直接使用 el 表达式,如果属性值不存在,el 也会 

 自动输出空字符串〃〃,这对我们来说都是非常便捷的。  



  



                                         50 / 148  


…………………………………………………………Page 51……………………………………………………………

                                                 



edit。jsp 中还有一点儿隐藏的玄机,表单中定义了一个名叫 id 的隐藏属性,这 

样服务器才能知道我们需要修改那一条数据。  



  



既然是隐藏的,我们便不能在页面上看到它,但在提交的时候它还会与其他数据 

一起发送到服务器。  



修改信息之后,点击提交发送请求。  



                                                                                             



update。jsp 中与 save。jsp 相似,唯一不同的是这次我们调用的是 

contactDao。update()而不是 contactDao。save()。  



contactDao。update(contact);  



update()会根据 id 的值修改数据库中对应的数据,而不是添加一条新数据,这 

从跳转后的 list。jsp 可以看出来。  



                                                                                             



                                            51 / 148  


…………………………………………………………Page 52……………………………………………………………

                                          



5。5。 Delete(删除)  



点击列表右侧的“删除”,就会删除这条数据。  



remove。jsp 与修改数据时一样,都需要传递一个 id 来指定要操作哪一条记录。  



删除  



remove。jsp 依然没有任何显示,仅仅使用 java 操作。  



  

  



因为只需要 id 和 contactDao,remove。jsp 的代码十分单纯,首先从request 

中获得 id,然后删除 id 对应的记录,最后页面重定向到 list。jsp。删除便成功 

了。  



                                                                               



5。6。 用 jdbc 操作数据库  



虽然有人说 JDBC 是 Java Database Bridge Connection (java 数据库桥接)的 

缩写,但 sun 公司一直没有承认这种解释。不过 jdbc 确实是一种桥接方式,所 

有服务器厂商都为 jdbc 提供对应自己数据库的驱动,我们只要学会使用 jdbc 

中的类和方法,就可以通过它操作任何一款数据库了。  



这次我们使用的是一个名叫 hsqldb 的嵌入型数据库,它是使用 java 编写的,把 

hsqldb…1。8。0。7。jar 放到 WEB…INF/lib/目录下就可以使用了。  



                                      52 / 148  


…………………………………………………………Page 53……………………………………………………………

                                        



现在看我们是如何连接数据库的,hsqldb…1。8。0。7。jar 中已经为我们提供了 

jdbc 驱动,为了方便调用我们将 jdbc 的配置封装在 anni。DbUtils 中。  



    1。  Class。forName(〃org。hsqldb。jdbcDriver〃);加载 jdbc 驱动。  



       Class。forName()是惯用写法,可以强制加载指定的类, 
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!