注册页面的搭建
2015-09-12 16:28
309 查看
先用javaScript对form表单做处理
还需要对jdbc连接mySql做简单的封装
连接数据库需要jar包,以及一些简单的数据库操作,这里就不进行说明了
定义一个接口 用来完成用户注册 利用实现接口来解决单继承的窘境
建立一个类来完成数据的访问
再建立一个类 来完成业务逻辑的处理
总结一下,这种像三层架构或者MVC框架来编写的方式,结构清晰、耦合度低,可维护性高,可扩展性高,利于开发任务同步进行;容易适应需求变化等。
function dosubmit() { var th = document.form1; if (th.username.value == "") { alert("用户名不能为空!!"); th.username.focus(); return; } if (th.realname.value == "") { alert("姓名不能为空!!"); th.realname.focus(); return; } if (th.pswd.value == "") { alert("密码不能为空!!"); th.pswd.focus(); return; } th.action="<%=path%>/servlet/RegisterAction"; th.submit(); } </script>
还需要对jdbc连接mySql做简单的封装
package com.jdbc.util; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MySqlConnect { private Connection conn; private PreparedStatement preState; private ResultSet resultSet; public MySqlConnect() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); System.out.println("驱动注册成功!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } public Connection getConnect() { try { conn = DriverManager.getConnection("jdbc:mysql://localhost/mydata?" + "user=root&password=root"); System.out.println("数据库连接成功!"); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 封装的删除 增加 修改操作 * * @param sql * 执行的sql语句 * @param params * sql语句的占位符 * @return 操作是否成功 * @throws SQLException */ public boolean updataByPrepareStatement(String sql, List<Object> params) throws SQLException { boolean flag = false; // 执行数据操作所影响的行数 int result = -1; preState = conn.prepareStatement(sql); int index = 1; if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { preState.setObject(index++, params.get(i)); } } result = preState.executeUpdate(); flag = result > 0 ? true : false; return flag; } /** * 封装单条语句查询 * * @param sql * 执行的sql语句 * @param params * 执行sql语句的占位符 * @return 返回单条语句查询结果 * @throws SQLException */ public Map<String, Object> queryBySimpleResult(String sql, List<Object> params) throws SQLException { Map<String, Object> map = new HashMap<String, Object>(); preState = conn.prepareStatement(sql); int index = 1; if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { preState.setObject(index++, params.get(i)); } } resultSet = preState.executeQuery(); ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int column_long = resultSetMetaData.getColumnCount(); while (resultSet.next()) { for (int i = 0; i < column_long; i++) { String column_name = resultSetMetaData.getColumnName(i + 1); Object column_value = resultSet.getObject(column_name); if (column_value == null) { column_value = ""; } map.put(column_name, column_value); } } return map; } /** * 封装多条语句查询 * * @param sql * @param params * @return * @throws SQLException */ public List<Map<String, Object>> queryByMoreResults(String sql, List<Object> params) throws SQLException { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); int index = 1; preState = conn.prepareStatement(sql); if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { preState.setObject(index++, params.get(i)); } } resultSet = preState.executeQuery(); ResultSetMetaData metaData = resultSet.getMetaData(); int column_long = metaData.getColumnCount(); while (resultSet.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < column_long; i++) { String cloumn_name = metaData.getColumnName(i + 1); Object cloumn_Value = resultSet.getObject(cloumn_name); if (cloumn_Value == null) { cloumn_Value = ""; } map.put(cloumn_name, cloumn_Value); } list.add(map); } return list; } /** * 使用反射来查询单条数据 * * @param sql * sql语句 * @param params * @param cls * 封装数据的类 * @return * @throws Exception */ public <T> T refQueryBySimpleResult(String sql, List<Object> params, Class<T> cls) throws Exception { T resultObject = null; int index = 1; preState = conn.prepareStatement(sql); if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { preState.setObject(index++, params.get(i)); } } resultSet = preState.executeQuery(); ResultSetMetaData metaData = resultSet.getMetaData(); int column_long = metaData.getColumnCount(); while (resultSet.next()) { // 通过反射机制完成实例 resultObject = cls.newInstance(); for (int i = 0; i < column_long; i++) { String column_name = metaData.getColumnName(i + 1); Object column_value = resultSet.getObject(column_name); if (column_value == null) { column_value = ""; } // 获取类的成员变量 Field field = cls.getDeclaredField(column_name); // 打开成员变量的private访问权限 field.setAccessible(true); field.set(resultObject, column_value); } } return resultObject; } /** * 使用反射来查询多条数据 * * @param sql * sql语句 * @param params * @param cls * 封装数据的类 * @return * @throws Exception */ public <T> List<T> refQueryByMoreResult(String sql, List<Object> params, Class<T> cls) throws Exception { List<T> list = new ArrayList<T>(); int index = 1; preState = conn.prepareStatement(sql); if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { preState.setObject(index++, params.get(i)); } } resultSet = preState.executeQuery(); ResultSetMetaData metaData = resultSet.getMetaData(); int column_long = metaData.getColumnCount(); while (resultSet.next()) { // 通过反射机制完成实例 T resultObject = cls.newInstance(); for (int i = 0; i < column_long; i++) { String column_name = metaData.getColumnName(i + 1); Object column_value = resultSet.getObject(column_name); if (column_value == null) { column_value = ""; } // 获取类的成员变量 Field field = cls.getDeclaredField(column_name); // 打开成员变量的private访问权限 field.setAccessible(true); field.set(resultObject, column_value); } list.add(resultObject); } return list; } // 释放连接 public void releaseConnect() { if (resultSet != null) { try { resultSet.close(); resultSet = null; } catch (SQLException e) { e.printStackTrace(); } } if (preState != null) { try { preState.close(); preState = null; } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } } }
连接数据库需要jar包,以及一些简单的数据库操作,这里就不进行说明了
定义一个接口 用来完成用户注册 利用实现接口来解决单继承的窘境
package com.servlet.register.service; import java.util.List; public interface RegisterService { public boolean registerUser(List<Object> params); }
建立一个类来完成数据的访问
package com.servlet.register.dao; import java.util.List; import com.jdbc.util.MySqlConnect; import com.servlet.register.service.RegisterService; public class RegisterDao implements RegisterService { private MySqlConnect util = null; public RegisterDao() { util = new MySqlConnect(); } /* (non-Javadoc) * 完成注册 * @see com.servlet.register.service.RegisterService#registerUser(java.util.List) */ public boolean registerUser(List<Object> params) { boolean flage = false; // 连接数据库 util.getConnect(); String sql = "insert into userinfo(username,password,realname) values(?,?,?) "; try { // 执行sql语句 util.updataByPrepareStatement(sql, params); flage=true; } catch (Exception e) { System.out.println("执行出错!"); } finally { // 关闭数据库 util.releaseConnect(); } return flage; } }
再建立一个类 来完成业务逻辑的处理
package com.servlet.register.action; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.servlet.register.dao.RegisterDao; import com.servlet.register.service.RegisterService; public class RegisterAction extends HttpServlet { private static final long serialVersionUID = 1L; private RegisterService service; public RegisterAction() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获得上下文路径 String path = request.getContextPath(); System.out.println("path " + path); response.setContentType("text/html;charset=utf-8"); String username = request.getParameter("username"); String password = request.getParameter("pswd"); String realname = request.getParameter("realname"); List<Object> params = new ArrayList<Object>(); params.add(username); params.add(password); params.add(realname); boolean flag = service.registerUser(params); if (flag) { //跳转到登陆页面 response.sendRedirect(path + "/index.jsp"); } } public void init() throws ServletException { // Put your code here service = new RegisterDao(); } }
总结一下,这种像三层架构或者MVC框架来编写的方式,结构清晰、耦合度低,可维护性高,可扩展性高,利于开发任务同步进行;容易适应需求变化等。
相关文章推荐
- ACM POJ2533 简单dp
- C++学习笔记 -- 虚析构函数与纯虚析构函数
- DrawerLayout拦截了应该传到子View的事件
- Baskets of Gold Coins
- C#中复制数组
- Linux和Windows的换行符
- TCP协议中的三次握手和四次挥手(图解)
- python学习——heapq模块
- IO端口和IO内存
- 遗传算法解01背包问题(Java)
- 互联网团队的三三得九战术
- 【日常学习】【树形DP】codevs3023 魔法禁书目录1:追捕大妈题解
- “数据结构基础”系列网络课程主页
- Linux和Windows的换行符
- 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试
- centos7.x 防火墙配置:关闭firewall 安装iptables
- python 内置函数filter和sorted的使用
- jeecms自定义标签
- 继承和多态的代码示例
- 找到两个不相容子数组的最大和