我的漫漫程序之旅

专注于JavaWeb开发

Servlet + FreeMarker 简单实现CRUD

1.数据库脚本:

drop table users

create table users
(
 id 
int primary key identity(1,1),
 username 
varchar(50)
)

drop proc adduser

create proc adduser
as
   
declare @i int
   
set @i  = 1
  
begin 
    
while(@i <= 100
    
begin
     
insert into users values('name' + convert(varchar(10),@i))
       
set @i = @i + 1
    
end
 
  
end    
go

exec adduser

select count(*as rows from users

2.数据库连接类:
package com.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 数据库连接类
 * 
 * 
@author zdw
 * 
 
*/

public class DB
{
    
private static final String DBDRIVER = "net.sourceforge.jtds.jdbc.Driver";
    
private static final String DBURL = "jdbc:jtds:sqlserver://localhost:1433/pubs;user=sa;pwd=";

    
private DB()
    
{
    }


    
public static DB getInstance()
    
{
        
return new DB();
    }


    
public Connection getConn()
    
{
        Connection conn 
= null;
        
try
        
{
            Class.forName(DBDRIVER);
            conn 
= DriverManager.getConnection(DBURL);
        }
 catch (ClassNotFoundException e)
        
{
            e.printStackTrace();
        }
 catch (SQLException e)
        
{
            e.printStackTrace();
        }

        
return conn;
    }


}


3.UserDAO:
package com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.db.DB;
import com.vo.User;

/*******************************************************************************
 * userdao 对用户实现增删改查
 * 
 * 
@author zdw
 * 
 
*/

public class UserDAO
{
    
public List<User> queryAll()
    
{
        List
<User> list = new ArrayList<User>();
        String sql 
= "select * from users";
        Connection conn 
= DB.getInstance().getConn();
        
try
        
{
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            ResultSet rs 
= pstmt.executeQuery();
            
while (rs.next())
            
{
                User user 
= new User();
                user.setId(rs.getInt(
"id"));
                user.setName(rs.getString(
"name"));
                list.add(user);
            }

        }
 catch (SQLException e)
        
{
            e.printStackTrace();
        }
 finally
        
{
            
try
            
{
                conn.close();
            }
 catch (SQLException e)
            
{
                e.printStackTrace();
            }

        }

        
return list;
    }


    
public User queryById(Integer id)
    
{
        User user 
= null;
        String sql 
= "select * from users where id = ?";
        Connection conn 
= DB.getInstance().getConn();
        
try
        
{
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            pstmt.setInt(
1, id);
            ResultSet rs 
= pstmt.executeQuery();
            
while (rs.next())
            
{
                user 
= new User();
                user.setId(rs.getInt(
"id"));
                user.setName(rs.getString(
"name"));
            }

        }
 catch (SQLException e)
        
{
            e.printStackTrace();
        }
 finally
        
{
            
try
            
{
                conn.close();
            }
 catch (SQLException e)
            
{
                e.printStackTrace();
            }

        }

        
return user;
    }


    
public void save(User user)
    
{
        String sql 
= "insert into users values(?)";
        Connection conn 
= DB.getInstance().getConn();
        
try
        
{
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            pstmt.setString(
1, user.getName());
            pstmt.executeUpdate();
        }
 catch (SQLException e)
        
{
            e.printStackTrace();
        }
 finally
        
{
            
try
            
{
                conn.close();
            }
 catch (SQLException e)
            
{
                e.printStackTrace();
            }

        }

    }


    
public void update(User user)
    
{
        String sql 
= "update users set name = ? where id = ?";
        Connection conn 
= DB.getInstance().getConn();
        
try
        
{
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            pstmt.setString(
1, user.getName());
            pstmt.setInt(
2, user.getId());
            pstmt.executeUpdate();
        }
 catch (SQLException e)
        
{
            e.printStackTrace();
        }
 finally
        
{
            
try
            
{
                conn.close();
            }
 catch (SQLException e)
            
{
                e.printStackTrace();
            }

        }

    }


    
public void delete(Integer id)
    
{
        String sql 
= "delete from users where id = ?";
        Connection conn 
= DB.getInstance().getConn();
        
try
        
{
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            pstmt.setInt(
1, id);
            pstmt.executeUpdate();
        }
 catch (SQLException e)
        
{
            e.printStackTrace();
        }
 finally
        
{
            
try
            
{
                conn.close();
            }
 catch (SQLException e)
            
{
                e.printStackTrace();
            }

        }

    }


}

4.UserServlet:
package com.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.UserDAO;
import com.vo.User;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

@SuppressWarnings(
"serial")
public class UserServlet extends HttpServlet
{
    
private Configuration cfg = null;

    @Override
    
public void init() throws ServletException
    
{
        cfg 
= new Configuration();
        cfg.setServletContextForTemplateLoading(
this.getServletContext(), null);
    }


    @SuppressWarnings(
"unchecked")
    @Override
    
protected void doGet(HttpServletRequest req, HttpServletResponse res)
            
throws ServletException, IOException
    
{
        
// 网站全路径
        String basePath = req.getScheme() + "://" + req.getServerName() + ":"
                
+ req.getServerPort() + req.getContextPath() + "/";
        
// 得到要操作的方法名
        String method = req.getParameter("method");

        Map map 
= new HashMap();
        map.put(
"path", basePath);
        
// 设置编码
        res.setCharacterEncoding("gbk");
        
// 得到输出流
        PrintWriter out = res.getWriter();
        Template t 
= null;
        
// 查询所有用户
        if (method.equals("queryAll"))
        
{
            List list 
= this.doQueryAll(req, res);
            map.put(
"list", list);
            t 
= cfg.getTemplate("WEB-INF/templates/index.ftl");
            System.out.println(
"ssdfs");
        }

        
// 添加用户前的跳转
        if (method.equals("forwardSave"))
        
{
            t 
= cfg.getTemplate("WEB-INF/templates/form.ftl");
        }

        
// 保存用户
        if (method.equals("save"))
        
{
            System.out.println(
"save");
            
this.doSave(req, res);
            req.getRequestDispatcher(
"/UserServlet?method=queryAll").forward(
                    req, res);
            
return;
        }

        
// 删除用户
        if (method.equals("delete"))
        
{
            
this.doDel(req, res);
            req.getRequestDispatcher(
"/UserServlet?method=queryAll").forward(
                    req, res);
            
return;
        }

        
// 更新用户前的跳转
        if (method.equals("forwardUpdate"))
        
{
            Integer id 
= Integer.parseInt(req.getParameter("id"));
            UserDAO userDAO 
= new UserDAO();
            User user 
= userDAO.queryById(id);
            map.put(
"user", user);
            t 
= cfg.getTemplate("WEB-INF/templates/update.ftl");
        }

        
// 更新用户
        if (method.equals("update"))
        
{
            
this.doUpdate(req, res);
            req.getRequestDispatcher(
"/UserServlet?method=queryAll").forward(
                    req, res);
            
return;
        }

        
try
        
{
            
// 处理map和输出流
            t.process(map, out);
            out.flush();
            out.close();
    &nbs