1.工作原理
工作原理如上图所示,其工作流程如下五个步骤:
- Servlet接收浏览器发出的请求。
- Servlet根据不同的请求调用相应的JavaBean.
- JavaBean按照子的业务逻辑,通过JDBC操作数据库。
- Servlet将结果传给了JSP。
- JSP将后台处理结果传给了浏览器。
2.采用JSP+Servlet+JavaBean+JDBC方式开发一个Web登录程序
(1)创建Java EE 项目
(2)构造JavaBean,创建JDBC。在src文件下建立包org.easybooks.test.model.vo,创建名为UserTable.java的java类。在包org.easybooks.test.jdbc中创建名为SqlSrvDBConn.java的Java类。
- UserTable.java代码如下:
package org.easybooks.test.model.vo;
public class UserTable {
//Fields
private Integer id;
private String username;
private String password;
//Property accessors
//属性 id 的 get/set 方法
public Integer getId(){
return this.id;
}
public void setId(Integer id){
this.id=id;
}
//属性 username 的 get/set 方法
public String getUsername(){
return this.username;
}
public void setUsername(String username){
this.username=username;
}
//属性 password 的 get/set 方法
public String getPassword(){
return this.password;
}
public void setPassword(String password){
this.password=password;
}
}
- SqlSrvDBConn.java代码如下:
package org.easybooks.test.jdbc;
import java.sql.*;
public class SqlSrvDBConn {
private Statement stmt;
private Connection conn;
ResultSet rs;
//在构造方法中创建数据库连接
public SqlSrvDBConn(){
stmt=null;
try{
/**加载并注册 SQLServer 2008 的 JDBC 驱动*/
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=TEST","sa","123456");
}catch(Exception e){
e.printStackTrace();
}
rs=null;
}
//执行查询类的SQL语句,有返回集
public ResultSet executeQuery(String sql)
{
try
{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
}catch(SQLException e){
System.err.println("Data.executeQuery: " + e.getMessage());
}
return rs;
}
//关闭对象
public void closeStmt()
{
try
{
stmt.close();
}catch(SQLException e){
System.err.println("Data.executeQuery: " + e.getMessage());
}
}
public void closeConn()
{
try
{
conn.close();
}catch(SQLException e){
System.err.println("Data.executeQuery: " + e.getMessage());
}
}
}
(3)编写JSP
- login.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
<title>简易留言板</title>
</head>
<body bgcolor="#E3E3E3">
<form action="mainServlet" method="post">
<table>
<caption>用户登录</caption>
<tr>
<td>用户名:</td>
<td>
<input type="text" name="username" size="20"/>
</td>
</tr>
<tr>
<td>密码:</td>
<td>
<input type="password" name="password" size="21"/>
</td>
</tr>
</table>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
如果没注册单击<a href="">这里</a>注册!
</body>
</html>
- main.jsp:
<%@ page language="java" pageEncoding="gb2312" import="org.easybooks.test.model.vo.UserTable"%>
<html>
<head>
<title>留言板信息</title>
</head>
<body>
<%
UserTable user=(UserTable)session.getAttribute("user");
String usr=user.getUsername();
%>
<%=usr%>,您好!欢迎登录留言板。
</body>
</html>
- error.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
<title>出错</title>
</head>
<body>
登录失败!单击<a href="login.jsp">这里</a>返回
</body>
</html>
(4)编写Servlet:在src文件下创建包org.easybooks.test.servlet,创建名为MainServlet.java的类
- MainServlet.java代码如下:
package org.easybooks.test.servlet;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.easybooks.test.jdbc.SqlSrvDBConn;
import org.easybooks.test.model.vo.UserTable;;
public class MainServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("gb2312"); //设置请求编码
String usr=request.getParameter("username"); //获取提交的用户名
String pwd=request.getParameter("password"); //获取提交的密码
boolean validated=false; //验证成功标识
SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();
HttpSession session=request.getSession(); //获得会话对象,用来保存当前登录用户的信息
UserTable user=null;
//先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息
user=(UserTable)session.getAttribute("user");
//如果用户是第一次进入,会话中尚未存储user持久化对象,故为null
if(user==null){
//查询userTable表中的记录
String sql="select * from userTable";
ResultSet rs=sqlsrvdb.executeQuery(sql); //取得结果集
try {
while(rs.next())
{
if((rs.getString("username").trim().compareTo(usr)==0)&&(rs.getString("password").compareTo(pwd)==0)){
user=new UserTable(); //创建持久化的JavaBean对象user
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
session.setAttribute("user", user); //把user对象存储在会话中
validated=true; //标识为true表示验证成功通过
}
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
sqlsrvdb.closeStmt();
sqlsrvdb.closeConn();
}
else{
validated=true; //该用户在之前已登录过并成功验证,故标识为true表示无须再验了
}
if(validated)
{
//验证成功跳转到main.jsp
response.sendRedirect("main.jsp");
}
else{
//验证失败跳转到error.jsp
response.sendRedirect("error.jsp");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
doGet(request,response);
}
}
(5)配置Servlet:在web.xml文件里配置。
- web.xml 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>jsp_servlet_javabean_jdbc</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>mainServlet</servlet-name>
<servlet-class>org.easybooks.test.servlet.MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mainServlet</servlet-name>
<url-pattern>/mainServlet</url-pattern>
</servlet-mapping>
</web-app>
最后部署运行
效果图:
总结:
servlet是一种web服务器端的Java程序,具有独立平台和协议的特性,可以动态的生成Web网页
原JSP文件的功能全部改由Servlet来实现