- 浏览: 79805 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
一辈子的咲子推:
其实很多学生考试不及格未必就是不学习,太多学生把大学几年时间全 ...
真的不想监考 -
jackroomage:
看错了,你写的没有问题。sorry!!!
Java Web实践专题——访问路径问题 -
jackroomage:
<a href="./../bb/b_a.js ...
Java Web实践专题——访问路径问题
学习目标:
l 进一步掌握MVC设计模式;
l 掌握添加功能的实现;
l 掌握分页显示功能的实现。
主要内容:
l 通过用户信息添加功能进一步介绍MVC模式;
l 通过用户信息的分页显示介绍分页显示功能的原理和实现。
1、如何采用MVC模式完成用户添加?
首先考虑与人如何交互:应该有一个输入用户信息的界面,包含用户名和口令,另外需要一反馈的界面。
然后考虑功能如何实现:需要在User类中添加一个方法,完成用户信息的添加。
最后考虑控制器:获取信息;调用JavaBean;传值;选择界面响应。
2、添加用户的界面
实际应用中的信息项比较多,并且需要对用户输入信息进行验证。这里重点强调添加过程,所以对问题进行简化。可以在登录界面的基础上修改,参考代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
添加用户<br>
<form name="form1" method="post" action="addUser">
用户ID:<input type="text" name="username"><br>
口令:<input type="password" name="userpass"><br>
<input type="submit" value="添加"><input type="reset" value="重置">
</form>
<%@ include file="contact.jsp"%>
3、在User中增加方法
public boolean addUser()
{
Connection con = null;
Statement stmt = null;
boolean b; // 表示添加成功与否
try{
// 指出连接数据库所需要的驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 建立与数据库之间的连接
// 需要把myserver修改为自己的数据库服务器的IP地址
// 把mydb修改成自己的数据库)
con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");
// 编写查询数据库信息的SQL语句
String sql="insert into usertable(username,userpass) values('"+username+"','"+userpass+"')";
// 创建语句对象,用于执行SQL语句
stmt = con.createStatement();
// 执行没有结果集返回的语句,返回的是影响数据库表中记录的个数
int n = stmt.executeUpdate(sql);
if(n>0)
b = true;
else
b = false;
}catch(Exception e){
b = false;
}
finally{
// 关闭相关对象
if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}
if(con!=null) try{ con.close(); }catch(Exception ee){}
}
return b;
}
4、使用Servlet进行控制
参考代码如下:
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class AddUser extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
request.setCharacterEncoding("gb2312");
// 第一步:获取用户的输入信息
String username = request.getParameter("username");
String userpass = request.getParameter("userpass");
// 第二步:调用JavaBean
User user = new User();
user.setUsername(username);
user.setUserpass(userpass);
boolean b = user.addUser();
// 第三步:传值
String info;
if(b)
info="添加成功!";
else
info="添加失败!";
request.setAttribute("addinfo",info);
// 第四步:选择一个界面对用户进行响应
String forward="getAllUser";
RequestDispatcher rd = request.getRequestDispatcher(forward);
rd.forward(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
doGet(request,response);
}
}
此处添加完成之后跳转到userlist.jsp文件处理,但是在显示之前需要获取数据,所以需要先执行Servlet,所以专向了getAllUser控制器。
5、修改配置文件
<servlet>
<servlet-name>addUser</servlet-name>
<servlet-class>servlet.AddUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addUser</servlet-name>
<url-pattern>/addUser</url-pattern>
</servlet-mapping>
6、在列表界面显示提示信息
修改userlist.jsp代码如下,红色部分为增加的内容:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<font color="red">
${addinfo}
</font>
<br>
<c:forEach var="user" items="${users}">
用户名:${user.username} 口令:${user.userpass}<br>
</c:forEach>
7、运行测试
输入正确的用户名和口令测试;
输出已经存在的用户名进行测试。
8、添加分页显示
经过不断的添加,数据库表中已经有大量的记录。当记录比较多的时候就应该进行分页显示。分页显示可以采用多种方式:
l 在SQL中进行控制,只查询需要的记录;
l 在遍历结果集的时候,只封装相关的记录;
l 在显示的时候进行控制。
第一种方式对开发人员的SQL水平要求比较高,第三种方式传递的数据量比较大,所以我们介绍第二种。
要完成分页显示,需要做3个方面的修改:
l 界面上增加分页显示的超链接;
l 修改User.java,在遍历结果集的时候进行控制,另外需要增加获取页码数的方法;
l 在控制器中传递需要的页码和总页码。
9、在界面上增加分页显示功能
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<font color="red">
${addinfo}
</font>
<br>
<a href="getAllUser?pageNo=1">第一页</a>
<a href="getAllUser?pageNo=${pageNo-1}">上一页</a>
<a href="getAllUser?pageNo=${pageNo+1}">下一页</a>
<a href="getAllUser?pageNo=${pageCount}">最后一页</a>
<br>
<c:forEach var="user" items="${users}">
用户名:${user.username} 口令:${user.userpass}<br>
</c:forEach>
其中,pageNo表示当前页码,pageCount表示总页数。
10、 在User.java中增加获取总页码的方法
public int getPageCount()
{
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try{
// 指出连接数据库所需要的驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 建立与数据库之间的连接
con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");
// 编写查询数据库信息的SQL语句
String sql="select count(*) from usertable";
// 创建语句对象,用于执行SQL语句
stmt = con.createStatement();
// 执行SQL语句得到结果集
rs = stmt.executeQuery(sql);
rs.next();
// 得到总的记录数
int number = rs.getInt(1);
return (number-1)/10+1;
}catch(Exception e){
return 0;
}
finally{
// 关闭相关对象
if(rs!=null) try{ rs.close(); }catch(Exception ee){}
if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}
if(con!=null) try{ con.close(); }catch(Exception ee){}
}
}
11、 增加按照页码获取信息的方法
public ArrayList getUserByPage(int pageNo)
{
int number=10;
// 每一页显示的记录数
int begin = (pageNo * number) - 9;
int end = pageNo * number;
int index=1;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList users = new ArrayList();
try{
// 指出连接数据库所需要的驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 建立与数据库之间的连接
con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.170:1521:fhdn","scott","tiger");
// 编写查询数据库信息的SQL语句
String sql="select * from usertable";
// 创建语句对象,用于执行SQL语句
stmt = con.createStatement();
// 执行SQL语句得到结果集
rs = stmt.executeQuery(sql);
// 遍历结果集
while(rs.next())
{
// 在begin之前的记录是不显示的
if(index<begin){
index++;
continue;
}
// 在end之后的记录也不显示
if(index>end)
break;
index++;
String username = rs.getString(1);
String userpass = rs.getString(2);
// java.util.Date birthday = rs.getDate(3);
// int age = rs.getInt(4);
User user = new User();
user.setUsername(username);
user.setUserpass(userpass);
users.add(user);
}
}catch(Exception e){
System.out.println(e.getMessage());
}
finally{
// 关闭相关对象
if(rs!=null) try{ rs.close(); }catch(Exception ee){}
if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}
if(con!=null) try{ con.close(); }catch(Exception ee){}
}
return users;
}
12、 修改控制器
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class GetAllUser extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
// 第一步:获取用户的输入信息
String pageNo=request.getParameter("pageNo");
int iPageNo=1;
if(pageNo!=null)
{
iPageNo = Integer.parseInt(pageNo);
}
// 第二步:调用JavaBean
User user = new User();
ArrayList users=null;
users = user.getUserByPage(iPageNo);
int pageCount=user.getPageCount();
// 第三步:传值
request.setAttribute("users",users);
request.setAttribute("pageNo",new Integer(iPageNo));
request.setAttribute("pageCounter",new Integer(pageCount));
// 第四步:选择一个界面对用户进行响应
String forward="userlist.jsp";
RequestDispatcher rd = request.getRequestDispatcher(forward);
rd.forward(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
doGet(request,response);
}
}
13、 之后再进行测试运行
14、 增加对第一页和最后一页的控制
如果已经在第一页,就不能再点击第一页或者首页。如果已经在最后一页,就不能再点击最后一页或者下一页。修改userlist.jsp中代码如下(部分代码):
<c:if test="${pageNo!=1}">
<a href="getAllUser?pageNo=1">第一页</a>
<a href="getAllUser?pageNo=${pageNo-1}">上一页</a>
</c:if>
<c:if test="${pageNo!=pageCounter}">
<a href="getAllUser?pageNo=${pageNo+1}">下一页</a>
<a href="getAllUser?pageNo=${pageCounter}">最后一页</a>
</c:if>
这里设置为不显示,也可以设置为不添加超链接。
15、 增加对异常的处理
如果用户按照这样的方式访问:http://127.0.0.1:8080/ch8/getAllUser?pageNo=aaa,将产生异常。因为页码不是数字,所以需要进行异常处理。修改
iPageNo = Integer.parseInt(pageNo);
为
try{ iPageNo = Integer.parseInt(pageNo);}catch(Exception e){}
参考教材:《Java Web程序设计基础教程》
发表评论
-
网页之间共享值
2007-03-19 13:49 454Web应用是由大量的网页组成的,运行的基本原理是:用户通过客 ... -
Java Web实践专题——Eclipse中CVS的使用
2007-03-19 14:50 603CVS概述 主要作用是管理代码的版本,尤其是多人协同开发的时 ... -
Eclipse中Web应用的开发
2007-03-30 09:35 507Eclipse中Web应用的开发 应用服务器:tomcat ... -
MVC模式在Java Web中的应用
2007-04-21 22:06 396流行的Java Web应用框架基本上都实现了MVC模型,下面分 ... -
Tomcat中连接池的配置和使用
2007-04-27 13:19 465对于大型网站来说,信 ... -
WebLogic中连接池错误Failed to Generate Wrapper Class的解决方案
2007-05-01 13:25 543很多人在使用Weblogic配置连接池之后,会碰到这样一个 ... -
Sun Java System Appliation Server中连接池的配置
2007-05-01 14:16 5011、准备驱动程序 把 ... -
Java Web中的分页显示——通过界面实现
2007-05-04 23:11 670在界面完成分页控制, ... -
Java Web中的分页显示——在模型中实现
2007-05-04 23:25 465在模型中实现分页显示,主要是在把查询的结果集转换成对象集合的 ... -
NetBeans中的几个快捷方式
2007-06-15 12:38 508几个比较常用的方便代码编写的功能如下: 1、引入用到的类 ... -
最好的Java Web开发的书应该是什么样子?
2007-06-20 14:50 687关于Java Web开发的技术非常多,JSP、Servet、J ... -
JSP培训(1)——概述
2007-08-21 08:35 520本文是JSP培训的笔记,是培训的第一次——概述。 (参考 ... -
JSP培训(2)——运行原理、文档结构、简单输入输出
2007-08-23 09:16 602目标: l 掌握Web应用的文档结构; l 掌握JSP ... -
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
2007-08-30 09:49 512目标: l 掌握客户端验证的基本过程; l 掌握 ... -
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
2007-08-30 09:55 768目标: l 进一步体会JSP应用; l 掌握表达 ... -
JSP培训(5)——使用JavaBean完成业务逻辑
2007-08-31 16:42 501目标: l 掌握什么是JavaBean; l 掌握如何 ... -
JSP培训(6)——使用Servlet作为控制器实现MVC模式
2007-09-04 13:38 614目标: l 初步理解MVC ... -
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
2007-09-04 13:43 537目标: l 掌握JDBC链接数据库的基本过程; l 掌 ... -
JSP连接Microsoft SQL Server出错:Error establishing socket解决方法
2007-09-06 14:09 501安装SQL Server的补丁即可。 安装的时候需要注意:第 ... -
JSP培训(9)——使用MVC模式完成删除和修改功能
2007-09-10 15:43 657目标: l 进一步理解MVC模式; l 掌握删除功能的 ...
相关推荐
本文实例讲述了JSP实现添加功能和分页显示的方法。分享给大家供大家参考。具体如下: 学习目标: ① 进一步掌握MVC设计模式; ② 掌握添加功能的实现; ③ 掌握分页显示功能的实现。 主要内容: ① 通过用户信息添加...
JSP分页显示JSP分页显示JSP分页显示JSP分页显示JSP分页显示JSP分页显示JSP分页显示JSP分页显示JSP分页显示
jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页jsp 分页...
JSP源码——分页 QQ菜单 jsp标签_noka3.9.zip
jsp使用自定义标签taglib分页系列——完整例子
用java在jsp页面实现 分页显示 实例 可以把 selectBySQL()换成list实现LIST分页
jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页jsp分页
文件以一个实例的形式完成了jsp链接到sql数据库读取出内容并实现数据分页显示,有详细注释。
JSP页面的分页 JSP页面的分页 JSP页面的分页 JSP页面的分页 JSP页面的分页 JSP页面的分页 JSP页面的分页 JSP页面的分页
jsp+servlet增删改查分页显示 项目中有个info.doc照着里面的说明建表跟序列
jsp页面的分页组件、用于分页显示文章列表
手写功能代码JSP——需要抄写 手写功能代码JSP——需要抄写
jsp数据库分页查询及显示jsp数据库分页查询及显示jsp数据库分页查询及显示jsp数据库分页查询及显示
jsp网络编程——多媒体文件(8),对学习用帮助
Jsp中利用JavaBean技术实现分页功能 Jsp中利用JavaBean技术实现分页功能
jsp分页显示数据,基本上实现了网上所有我见过的分布显示方式!发上来给大家共享一下!
JSP核心技术——JSP引擎内幕(2010).pdf 内除了引擎外,还有jsp标签、线程安全
jsp网络编程——源文件(06——09)帮助
jsp网络编程——源文件(10——11)帮助