本次javaweb實習基於目前流行的企業級框架Spring 、Spring MVC、MyBatis(SSM)和前端技術JQuery的圖書管理系統,主要功能包括:圖書查詢、圖書管理、圖書編輯、讀者管理、圖書的借閱與歸還以及借還日志記錄等。
1.技術簡介
1.1 Mysql數據庫:
Mysql是一種開放源代碼的關系型數據庫管理系統(RDBMS),使用最常用的數據庫管理語言--結構化查詢語言(SQL)進行數據庫管理。
1.2 Javaweb:
Java Web,是用Java技術來解決相關web互聯網領域的技術棧。web包括:web服務端和web客戶端兩部分。Java在客戶端的應用有Java Applet,不過使用得很少,Java在服務器端的應用非常的豐富,比如Servlet,JSP、第三方框架等等。Java技術對Web領域的發展注入了強大的動力。
1.3 SSM
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內容)。常作為數據源較簡單的web項目的框架。
2.Myweb項目部分功能實現
2.1 連接數據庫:
try {
//1.加載驅動
Class.forName(driver);
//2.獲得數據庫連接
this.conn = DriverManager.getConnection(url, userno, password);
return conn;
} catch (Exception e) {
// 將異常信息寫入到指定文件中(日志文件)
e.printStackTrace();
}
return null;
2.2 查詢用戶列表
代碼:
//執行sql查詢
String sql = "select * from t_user";
try {
//1、獲得連接
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
//3、執行查詢命令
this.rs = ps.executeQuery();
//4、取出執行結果
List<User> list = new ArrayList<User>();
while(rs.next()) {//如果有下一條
String name = rs.getString("name");
int userid = rs.getInt("user_id");
int age = rs.getInt("age");
String email = rs.getString("email");
String address = rs.getString("address");
String userno = rs.getString("userno");
String password = rs.getString("password");
User user = new User();
user.setAddress(address);
user.setAge(age);
user.setEmail(email);
user.setName(name);
user.setPassword(password);
user.setUserno(userno);
user.setUserid(userid);
list.add(user);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
2.3 登錄
代碼:
//執行sql查詢
String sql = "select * from t_user where userno='"+userno+"' and password='"+password+"'";
try {
//1、獲得連接
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
//3、執行查詢命令
this.rs = ps.executeQuery();
//4、取出執行結果
while(rs.next()) {//如果有下一條
String name = rs.getString("name");
int userid = rs.getInt("user_id");
int age = rs.getInt("age");
String email = rs.getString("email");
String address = rs.getString("address");
User user = new User();
user.setAddress(address);
user.setAge(age);
user.setEmail(email);
user.setName(name);
user.setPassword(password);
user.setUserno(userno);
user.setUserid(userid);
return user;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
結果:
2.4 搜索用戶列表
代碼:
//執行sql查詢
String sql = "select * from t_user where userno like '%" + userno1 + "%'";
try {
//1、獲得連接
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
//3、執行查詢命令
this.rs = ps.executeQuery();
//4、取出執行結果
List<User> list = new ArrayList<User>();
while(rs.next()) {//如果有下一條
String name = rs.getString("name");
int userid = rs.getInt("user_id");
int age = rs.getInt("age");
String email = rs.getString("email");
String address = rs.getString("address");
String userno = rs.getString("userno");
String password = rs.getString("password");
User user = new User();
user.setAddress(address);
user.setAge(age);
user.setEmail(email);
user.setName(name);
user.setPassword(password);
user.setUserno(userno);
user.setUserid(userid);
list.add(user);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
結果:
2.5 刪除用戶
代碼:
String sql = "delete from t_user where user_id="+userid;
try {
//1、獲得連接
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
//3、執行刪除、修改、新增命令
//result:數據庫受影響的行數
int result = ps.executeUpdate();//成功或失敗,true后false
if(result>0) {
//成功
return true;
}else {
//失敗
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
結果:
2.6 根據id查詢用戶信息
代碼:
String sql = "select * from t_user where user_id=" + userid;
try {
//1、獲得連接(連接數據庫)
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
//3、執行查詢命令
this.rs = ps.executeQuery();
//4、取出執行結果
User user = null;
if(rs.next()) {//如果有下一條
String name = rs.getString("name");
int age = rs.getInt("age");
String email = rs.getString("email");
String address = rs.getString("address");
String userno = rs.getString("userno");
String password = rs.getString("password");
user = new User();
user.setAddress(address);
user.setAge(age);
user.setEmail(email);
user.setName(name);
user.setPassword(password);
user.setUserno(userno);
user.setUserid(Integer.parseUnsignedInt(userid));
}
return user;
} catch (Exception e) {
e.printStackTrace();
}
return null;
2.7 修改用戶
代碼:
String sql = "update t_user set userno=?,`password`=?,`name`=?,age=? where user_id=?";
try {
//1、獲得連接
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
ps.setString(1, user.getUserno());//第一個問號
ps.setString(2, user.getPassword());
ps.setString(3, user.getName());
ps.setInt(4, user.getAge());
ps.setInt(5, user.getUserid());
//3、執行刪除、修改、新增命令
//result:數據庫受影響的行數
int result = ps.executeUpdate();//成功或失敗,true后false
if(result>0) {
//成功
return true;
}else {
//失敗
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
結果:
2.8 新增用戶
代碼:
String sql = "insert into t_user(userno,`password`,`name`,age) values(?,?,?,?)";
try {
//1、獲得連接
this.conn = this.getConn();
//2、獲得執行命令對象
this.ps = conn.prepareStatement(sql);
ps.setString(1, user.getUserno());//第一個問號
ps.setString(2, user.getPassword());
ps.setString(3, user.getName());
ps.setInt(4, user.getAge());
// ps.setString(5, user.getEmail());
// ps.setString(6, user.getAddress());
//3、執行刪除、修改、新增命令
//result:數據庫受影響的行數
int result = ps.executeUpdate();//成功或失敗,true后false
if(result>0) {
//成功
return true;
}else {
//失敗
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
結果:
2.9 LoginServlet
/**
* 用戶登錄
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public LoginServlet() {
// TODO Auto-generated constructor stub
}
/**
* 接收get請求
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* 接收post請求
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userno = request.getParameter("userno");//取得賬號
String password = request.getParameter("password");//取得密碼
UserService userService = new UserService();
//調用業務層方法
User user = userService.login(userno, password);
if(user != null) {
//查詢用戶
List<User> list = userService.findUserList();
//查詢總頁數
int count = userService.findUserCount();//數據總數
Page page = new Page();
int total = 0;//總頁數
if(count % page.getPageSize() > 0) {
total = count/page.getPageSize() + 1;
}else {
total = count/page.getPageSize();
}
//跳轉到首頁
//request中的數據針對的是某一次請求,請求結束數據失效
//request.setAttribute("user", user);
//session對象針對的是同一個瀏覽器的不同窗口直接共享數據
request.getSession().setAttribute("user", user);
request.setAttribute("list", list);
request.setAttribute("page", new Page().getPage());//當前第幾頁
request.setAttribute("total", total);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else {
//登陸失敗
request.getRequestDispatcher("login.html").forward(request, response);
}
}
2.10 UserServlet
/**
* 用戶控制器
*/
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf8");
String action = request.getParameter("action");//取得操作行為
String userid = request.getParameter("userid");//取得用戶id
UserService userService = new UserService();
if(action != null && action.equals("delete")) {//刪除操作
boolean result = userService.deleteUser(userid);
if(result) {
//刪除成功
List<User> list = userService.findUserList();
//跳轉到首頁
//request.setAttribute("user", user);
request.setAttribute("list", list);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else if(action != null && action.equals("toUpdate")){//跳轉到修改界面
User user = userService.findUserById(userid);
request.setAttribute("user", user);
request.getRequestDispatcher("update.jsp").forward(request, response);
}else if(action != null && action.equals("update")) {
String userno = request.getParameter("userno");//取得賬號
String password = request.getParameter("password");//取得密碼
String age = request.getParameter("age")!=null?request.getParameter("age"):"0";//取得年齡
String name = request.getParameter("name");//取得姓名
User user = new User();
user.setUserid(Integer.parseInt(userid));
user.setAge(Integer.parseInt(age));
user.setName(name);
user.setUserno(userno);
user.setPassword(password);
boolean result = userService.updateUser(user);
if(result) {
//修改成功
//獲取用戶列表
List<User> list = userService.findUserList();
//跳轉到首頁
//request.setAttribute("user", user);
request.setAttribute("list", list);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else if(action != null && action.equals("toAdd")){//跳轉到新增界面
request.getRequestDispatcher("add.jsp").forward(request, response);
}else if(action != null && action.equals("add")) {//新增用戶
String userno = request.getParameter("userno");//取得賬號
String password = request.getParameter("password");//取得密碼
String age = request.getParameter("age")!=null?request.getParameter("age"):"0";//取得年齡
String name = request.getParameter("name");//取得姓名
User user = new User();
user.setAge(Integer.parseInt(age));
user.setName(name);
user.setUserno(userno);
user.setPassword(password);
boolean result = userService.addUser(user);
if(result) {
//添加成功
//獲取用戶列表
List<User> list = userService.findUserList();
//跳轉到首頁
//request.setAttribute("user", user);
request.setAttribute("list", list);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else if(action != null && action.equals("findPage")) {//分頁查詢
String page = request.getParameter("page") == null ? "1" : request.getParameter("page");//當前第幾頁
Page p = new Page();
p.setPage(Integer.parseInt(page));
List<User> list = userService.findUserListByPage(p);
//查詢總頁數
int count = userService.findUserCount();//數據總數
Page page2 = new Page();
int total = 0;//總頁數
if(count % page2.getPageSize() > 0) {
total = count/page2.getPageSize() + 1;
}else {
total = count/page2.getPageSize();
}
//跳轉到首頁
request.setAttribute("list", list);
request.setAttribute("page", page);//記錄當前頁數,便於頁面取值
request.setAttribute("total", total);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else {//搜索
String userno = request.getParameter("userno");//取得賬號
List<User> list = userService.findUserListByUserNo(userno);
//跳轉到首頁
//request.setAttribute("user", user);
request.setAttribute("list", list);
request.setAttribute("userno", userno);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
}
}
3.Myssm項目部分功能實現
3.1 查詢用戶列表和分頁
代碼:
UserInfoController.java:
/**
* 查詢用戶列表
* @throws Exception
*/
@RequestMapping("/findUserInfoList")
public void findUserInfoList(HttpServletRequest request,HttpServletResponse response) throws Exception{
String pageIndex = request.getParameter("pageIndex");//頁面索引,0:第一頁,1:第二頁,依次類推
String pageSize = request.getParameter("pageSize");//每頁多少條
String username = request.getParameter("key");//搜索功能:獲取搜索參數值(用戶姓名)
HashMap mapParam = new HashMap();
mapParam.put("pageSize", Integer.parseInt(pageSize));
mapParam.put("rowNum", Integer.parseInt(pageSize)*Integer.parseInt(pageIndex));
mapParam.put("username", username);
List<UserInfo> userInfoList = userInfoService.findUserInfoList(mapParam);
int count = userInfoService.findUserInfoCount();//查詢數據總數
HashMap map = new HashMap();
map.put("total", count);
map.put("data", userInfoList);
String json = JSON.encode(map);
System.out.println(json);
//向前端返回數據
response.getWriter().write(json);
}
Mapper.xml:
<!-- 查詢用戶列表 -->
<select id = "findUserInfoList" resultMap="BaseResultMap" parameterType = "map" >
select
<include refid = "Base_Column_List" />
from user_info
<if test = "username != null" >
where username like "%"#{username,jdbcType = VARCHAR}"%"
</if>
limit #{rowNum},#{pageSize}
<!-- limit ${(pageNo - 1) * pageSize},${pageSize} -->
</select>
<!-- 查詢用戶數據總數 -->
<select id = "findUserInfoCount" resultType = "int" parameterType = "map" >
select count(*) as count from user_info
</select>
結果:
3.2 用戶登錄
代碼:
UserInfoController.java:
/**
* 用戶登錄
* @throws Exception
*/
@RequestMapping("/userLogin")
public void userLogin(HttpServletRequest request,HttpServletResponse response) throws Exception{
String username = request.getParameter("username");
String password = request.getParameter("pwd");
UserInfo userInfo = new UserInfo();
userInfo.setUserno(username);
userInfo.setPassword(password);
UserInfo u = userInfoService.userLogin(userInfo);
if(u != null) {
response.getWriter().write("success");
}else {
response.getWriter().write("fail");
}
}
Mapper.xml:
<!-- 用戶登錄 -->
<select id = "userLogin" resultMap = "BaseResultMap" parameterType = "com.fxy.book.model.UserInfo" >
select * from user_info where userNo = #{userno,jdbcType = VARCHAR} and password = #{password,jdbcType = VARCHAR}
</select>
結果:
3.3 新增用戶
代碼:
UserInfoController.java:
/**
* 新增用戶
* @throws Exception
*/
@RequestMapping("/addUserInfo")
public void addUserInfo(HttpServletRequest request,HttpServletResponse response) throws Exception{
String userid = request.getParameter("userid");
if(userid==null||userid.equals("")){
userid = "0";
}
String username = request.getParameter("username");
String password = request.getParameter("password");
String userno = request.getParameter("userno");
String sex = request.getParameter("sex");
String address = request.getParameter("address");
String phone = request.getParameter("phone");
String role = request.getParameter("role");
UserInfo userInfo = new UserInfo();
userInfo.setPassword(password);
if(userid!=null && !userid.equals("")) {
userInfo.setUserid(Long.parseLong(userid));
}
userInfo.setUserno(userno);
userInfo.setAddress(address);
userInfo.setPhone(phone);
userInfo.setRole(Integer.parseInt(role));;
userInfo.setSex(sex);
userInfo.setUsername(username);
int result = userInfoService.addUserInfo(userInfo);
if(result > 0) {
response.getWriter().write("success");
}else {
response.getWriter().write("fail");
}
}
Mapper.xml:
<insert id = "insertSelective" parameterType = "com.fxy.book.model.UserInfo" >
insert into user_info
<trim prefix = "(" suffix = ")" suffixOverrides = "," >
<if test = "userid != null" >
userId,
</if>
<if test = "userno != null" >
userNo,
</if>
<if test = "password != null" >
password,
</if>
<if test = "username != null" >
userName,
</if>
<if test = "sex != null" >
sex,
</if>
<if test = "address != null" >
address,
</if>
<if test = "phone != null" >
phone,
</if>
<if test = "role != null" >
role,
</if>
<if test = "createtime != null" >
createTime,
</if>
</trim>
</insert>
結果:
