个人学习总结:
开发顺序:
1、界面原型设计
2、配置struts.xml文件
3、建立数据库
4、建立Model层
5、建立Service层
6、着手开发
7、测试
1、界面原型设计
主要是根据具体业务确定所需要的界面(jsp文件),下一步根据jsp的文件名称配置struts.xml文件中的Action。
2、配置struts.xml文件
主要工作包括:
2.1 配置默认访问的Action,界面入口Action,具体界面业务的Action。
2.2 同时建立Action对应的Class类和Model层的雏形。
2.3 最后要测试完成整个界面业务的畅通,在测试的过程中逐步完善struts.xml文件的配置以及相关工作。
struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="admin" namespace="/admin" extends="struts-default"> <!-- 界面入口Action --> <action name="index" class="com.bbs2014.action.CategoryAction" method="list"> <result>/admin/index.html</result> </action> <!-- 具体界面业务Action --> <!-- 两result可以再进行简化,但是struts2中提供了result的返回值为INPUT的类型专门用来输入界面使用 --> <action name="*_*" class="com.bbs2014.action.{1}Action" method="{2}"> <result>/admin/{1}_{2}.jsp</result> <result name="input">/admin/{1}_{2}.jsp</result> </action> </package> <!-- 默认访问Action --> <package name="front" namespace="/" extends="struts-default"> <default-action-ref name="Category_list" /> <action name="Category_list" class="com.bbs2014.action.CategoryAction" method="list"> <result>/index.jsp</result> </action> </package> </struts>
package com.bbs2014.action; import java.util.List; import com.bbs2014.model.Category; import com.opensymphony.xwork2.ActionSupport; public class CategoryAction extends ActionSupport{ private List<Category> categories; public String list(){ return SUCCESS; } public String add(){ return SUCCESS; } public String update(){ return SUCCESS; } public String delete(){ return SUCCESS; } public String addInput(){ return INPUT; } public String updateInput(){ return INPUT; } }
package com.bbs2014.model; public class Category { }
3、建立数据库
利用SQL语句创建数据库,创建表格,同时可将SQL语句保存在工程当中。
CREATE DATABASE bbs2014; USE bbs2014; CREATE TABLE _category(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(50),description VARCHAR(200));
Model层的设计参考数据库表中的字段,定义变量并自动生成get和set方法。
package com.bbs2014.model; public class Category { private int id; private String name; private String description; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
5.1. 创建一个工具包封装连接数据的类
5.2. 创建一个Service包,创建Service类,
5.3. 创建各种方法,(增删改查)
5.4. 实现创建的各种方法(连上数据库,创建sql语句)
连接数据库的工具类
package com.bbs2014.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DB { public static Connection createConn(){ Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs2014", "root", "liuyunlong"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static PreparedStatement prepared(Connection conn,String sql){ PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } return ps; } public static void close(Connection conn){ if (conn == null) { return; } try { conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } public static void close(Statement ps){ if (ps == null) { return; } try { ps.close(); ps = null; } catch (SQLException e) { e.printStackTrace(); } } public static void close(ResultSet rs){ if (rs == null) { return; } try { rs.close(); rs = null; } catch (SQLException e) { e.printStackTrace(); } } }
package com.bbs2014.service; 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.bbs2014.model.Category; import com.bbs2014.util.DB; public class CategoryService { public void add(Category c){ String sql = "insert into _category values (null,?,?)"; Connection conn = DB.createConn(); PreparedStatement ps = DB.prepared(conn, sql); try { ps.setString(1, c.getName()); ps.setString(2, c.getDescription()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } DB.close(conn); DB.close(ps); } public List<Category> list(){ String sql = "select * from _category"; Connection conn = DB.createConn(); PreparedStatement ps = DB.prepared(conn, sql); ResultSet rs = null; List <Category> categories = new ArrayList<Category>(); try { rs = ps.executeQuery(); Category c = null; while(rs.next()){ c = new Category(); c.setId(rs.getInt("id")); c.setName(rs.getString("name")); c.setDescription(rs.getString("description")); categories.add(c); } } catch (SQLException e) { e.printStackTrace(); } DB.close(conn); DB.close(ps); DB.close(rs); return categories; } public void delete(Category c){ deleteById(c.getId()); } public void deleteById(int id){ String sql = "delete from _category where id = ?"; Connection conn = DB.createConn(); PreparedStatement ps = DB.prepared(conn, sql); try { ps.setInt(1, id); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } DB.close(conn); DB.close(ps); } public void update(Category c){ String sql = "update _category set name = ?, description = ? where id = ?"; Connection conn = DB.createConn(); PreparedStatement ps = DB.prepared(conn, sql); try { ps.setString(1, c.getName()); ps.setString(2, c.getDescription()); ps.setInt(3, c.getId()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } DB.close(conn); DB.close(ps); } public Category loadById(int id){ String sql = "select * from _category where id = ?"; Connection conn = DB.createConn(); PreparedStatement ps = DB.prepared(conn, sql); ResultSet rs = null; Category c = null; try { ps.setInt(1, id); rs = ps.executeQuery(); if(rs.next()){ c = new Category(); c.setId(rs.getInt("id")); c.setName(rs.getString("name")); c.setDescription(rs.getString("description")); } } catch (SQLException e) { e.printStackTrace(); } DB.close(conn); DB.close(ps); DB.close(rs); return c; } }
该步骤主要工作就是将界面,Model和Service层联系起来。
6.1 在Action对应的类的各种方法中,调用Service类中的方法,并生成变量的get和set方法(还没理解透)
6.2 测试对数据库的操作是否正常,边测试边完善界面的设计。
其中更新功能的实现是给一个id先从数据库中查出当前的category并显示(CategoryService中的loadById方法),之后再Category_updateInput.jsp中将更新后的新的category的值赋给当前的category,在通过CategoryService中的update()方法更新数据库中的值。
CategoryAction中调用CategoryService中对应的方法
package com.bbs2014.action; import java.util.List; import com.bbs2014.model.Category; import com.bbs2014.service.CategoryService; import com.opensymphony.xwork2.ActionSupport; public class CategoryAction extends ActionSupport{ private List<Category> categories; private Category category; private int id; CategoryService categoryService = new CategoryService(); public String list(){ categories = categoryService.list();//给categories赋值 return SUCCESS; } public String add(){ categoryService.add(category); return SUCCESS; } public String update(){ categoryService.update(category); return SUCCESS; } public String delete(){ categoryService.deleteById(id); return SUCCESS; } public String addInput(){ return INPUT; } public String updateInput(){ category = categoryService.loadById(id); return INPUT; } public List<Category> getCategories() { return categories; } public void setCategories(List<Category> categories) { this.categories = categories; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } public int getId() { return id; } public void setId(int id) { this.id = id; } public CategoryService getCategoryService() { return categoryService; } public void setCategoryService(CategoryService categoryService) { this.categoryService = categoryService; } }
<body> Category_list <br> <a href="admin/Category_addInput">添加Category</a> <hr/> <s:iterator value="categories" var="c"> name=<s:property value="#c.name"/> , description=<s:property value="#c.description"/> <a href="admin/Category_delete?id=<s:property value="#c.id"/>">删除Category</a> <a href="admin/Category_updateInput?id=<s:property value="#c.id"/>">更新Category</a> <br/> </s:iterator> <s:debug></s:debug> </body>Category_addInput.jsp
<body> <form action="admin/Category_add" method="post"> name:<input name="category.name" /> description:<textarea name="category.description"></textarea> <input type="submit" value="add" /> </form> </body>Category_updateInput.jsp
<body> <form action="admin/Category_update" method="post"> <input type="hidden" name="category.id" value="<s:property value="category.id"/>"> name:<input name="category.name" value="<s:property value="category.name"/>" /> description:<textarea name="category.description"><s:property value="category.description"/></textarea> <input type="submit" value="update" /> </form> </body>