一、JSP+Servlet+JDBC开发数据库应用
上一讲“JSP+JDBC数据库应用开发初步”中,我们给出了一个小例子,采用JSP页面来处理用户的登录请求。本讲中,我们将该JSP页面替换为Servlet来处理用户登录请求。
实验步骤如下:
- 用户登录页面仍然采用原来的login.jsp页面,只需要把form表单的action方法修改为Servlet的url即可,其它不变。
- 资源页面也仍然采用resource.jsp不变,注意:该页面需要读取session中保存的用户名,若存在,则说明用户登录成功,可以显示资源信息,否则重新跳转到登录页。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8" import="java.util.*"%>
<html>
<body>
<%
String username="";
username=(String)session.getAttribute("userName");
if(username!=null)
out.println("欢迎"+username+"访问网站资源");
else
response.sendRedirect("login.jsp");
%>
</body>
</html>
- 新建servlets包,在该包内新建一个Servlet,命名为Handle,在自动生成的代码中导入如下几个包,用于访问数据库:
import javax.servlet.http.HttpSession;
import db.DBUtil;
import java.sql.SQLException;
- 修改doGet()方法,通过访问数据库来验证用户名和口令
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*---获取用户登录页面提交的用户名和密码---*/
String username=request.getParameter("userName");
String password=request.getParameter("passWord");
HttpSession session=request.getSession();
/*---定义jdbc数据库连接---*/
java.sql.Connection conn=null;
java.sql.PreparedStatement pre=null;
java.sql.ResultSet rs=null;
try{
conn=DBUtil.getConnection();
/*---定义sql语句并设置参数---*/
String sql="select * from stu where username=? and password=?";
pre=conn.prepareStatement(sql);
pre.setString(1,username);
pre.setString(2,password);
/*---执行sql语句---*/
rs=pre.executeQuery();
/*---根据查询结果进行登录跳转处理 ---*/
if(rs.next()){
session.setAttribute("userName", username);
session.setAttribute("passWord", password);
response.sendRedirect(request.getContextPath()+"/resource.jsp");
}
else{
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
} catch(Exception e){
e.printStackTrace();
} finally {
/*---释放资源并关闭连接 ---*/
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pre!=null) {
try {
pre.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
二、JSP+Servlet+JDBC+JavaBean开发数据库应用
本例修改上文中的Servlet,在其验证用户登录信息后,创建一个JavaBean对象保存在Session中,代替上例中的username和password两个字符串,这样可以通过JavaBean在页面间实现值的传递。
- 首先要在entity包中创建一个JavaBean,本例命名为Stu
- 在Servlet中导入该Stu类
import entity.Stu;
- 修改doGet()方法代码,创建Stu对象stu,调用set方法设置属性值,然后保存在session中,如下:
//省略部分代码
/*---根据查询结果进行登录跳转处理 ---*/
if(rs.next()){
/*---创建Stu对象,命名为stu,并设置属性值 ---*/
Stu stu=new Stu();
stu.setUsername(username);
stu.setPassword(password);
session.setAttribute("stu", stu);
response.sendRedirect(request.getContextPath()+"/resource.jsp");
}
else{
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
//省略部分代码
- 同时,resource.jsp文件也要进行相应修改,利用page指令导入Stu类,并且在Session中读取Servlet保存的stu对象。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8" import="java.util.*"%>
<%@ page import="entity.Stu" %>
<html>
<body>
<%
Stu stu=(Stu)session.getAttribute("stu");
if(stu!=null)
out.println("欢迎"+stu.getUsername()+"访问网站资源!<Br>"+"您的登录密码是:"+stu.getPassword());
else
response.sendRedirect("login.jsp");
%>
</body>
</html>
三、如何添加数据
前面的例子介绍了通过JDBC查询数据库,那么如何向数据库添加数据呢?其实主要程序结构是一样的。
- 新建前端页面,用户可以输入要添加的数据。
- 新建后端处理页面或者Servlet,接收用户提交的数据,通过JDBC连接访问数据库,执行添加数据的sql语句,如下:
String sql="insert into stu(username,password) values(?,?)";
pre=conn.prepareStatement(sql);
pre.setString(1, username);
pre.setString(2, password);
rows=pre.executeUpdate();
此例中,首先定义了sql语句:数据表为stu,添加一条记录,给数据表的username、password字段分别赋值(此处的username和password是数据库stu表中的字段名),取值用占位符“?”代替;
然后,调用setString方法分别设置两个占位符代表的参数值赋值,取值之前已经通过获取用户提交的数据保存在两个字符串变量username和password中(注意,此处的username和password是变量名,不是数据库字段名);
最后,执行executeUpdate操作,返回值赋值给整型变量rows,大于零表示添加成功的记录数,等于零表示未添加成功。