javaweb商城之后端(无框架)(一)注册功能

目前主流在Java Web应用中应用的最广泛的设计模式便是MVC模式,目前的主流Web框架大多也是基于MVC设计模式所编写的。

mvc,model-view-controller


view:视图层,通常用于向用户展示,常用html,jsp构建

controller:控制层,一般将从view层得到的请求转向相应的servlet层,再转向model的业务处理层,controller层常用于充当中介者作用。

model:模型层,一般分为业务处理层和数据访问层。

(view:jsp

controller:servlet

model:domain(javabean),service,dao)


注册功能

大致思路,输入,得到数据,封装进User类,放进数据库,再加点验证就行

先不加任何限制,把注册数据存进数据库

view:

<form action="/resigterServlet" >

<input type="name" name="user">

<input type="password" name="password">

.....(手机,姓名,邮箱)

<input type="submit" value="submit">


controller:

resigterServlet.java(servlet层)

doGet(){     //简写了,

String name=request.getparmeter("name");

String password=request.getparmeter("password");

User user=new User();//User类model层里的domain

user.set(name);

user.set(password);

UserService service=new UserService ();//UserService类model业务逻辑层

boolean isResigter=service.resigterUser(user);//调用UserService类的方法,判断是否成功注册

if(isResigter){

成功

}else{

失败

}


}

doPost(){

doGet(request,response);

}


model:

User.java(domain层)

private user;

private password;

getter,setter方法

UserService .java(Service层)

public boolean resigterUser(User user){

UserDao dao=new UserDao ();//dao层,访问数据库的

int row=0;//查看插入几条数据以此判断是否插入成功

row=dao.regist(user);

return row>0?true:false;

}

UserDao .java(Dao层)

public int regist(User user){

      Class.forName("com.mysql.jdbc.Driver");         
      

       conn = DriverManager.getConnection(url, userName, password+.....);//自己写

       PreparedStatement pre;

       String sql="insert into user values (?,?)";

      sql=con.prepareStatement(sql);

      pre.setString(1,user.getUsername);//开始插入数据

      pre.setString(2,user.getPassword);

      int m=sql.executeUpdate();//得到更新的数据条数

      return m;

}

emmmm以上是大致过程,没用编译器可能有点错误请谅解。

1封装扩展:BeanUtils jar

User类封装那里,如果要封很多个数据,每一个都set进User类对象user很麻烦,用BeanUtils能很好的解决。

可以看下本人文章BeanUtils使用及介绍

从表单获得数据多可以

Map<String, String[]> properties = request.getParameterMap();

BeanUtils.populate(user, properties);//将得到数据封装进user

BeanUtils只支持8种基本数据类型转换

如果传进数据有Date类型,可以注册转换器,再封装前加上

ConvertUtils.register(new DateLocaleConverter(), Date.class);

2数据库扩展:c3p0 jar,dbutils-queryrunner

C3P0是一个开源的JDBC连接池,

要在src目录下新建c3p0-config.xml,内容如下

<?xml version="1.0" encoding="UTF-8"?>

<!--参数自己改-->
<c3p0-config>


  <named-config name="mvcApp"> 


      <propertyname="user">root</property>


      <propertyname="password">123456</property>


      <propertyname="driverClass">com.mysql.jdbc.Driver</property>

       <!--java为数据库名-->
      <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/java</property>       
   </named-config>
</c3p0-config>

然后新建个DataSourceUtils类,工具类,通用的

package com.itheima.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils {

	private static DataSource dataSource = new ComboPooledDataSource();

	private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();

	// 直接可以获取一个连接池
	public static DataSource getDataSource() {
		return dataSource;
	}

	// 获取连接对象
	public static Connection getConnection() throws SQLException {

		Connection con = tl.get();
		if (con == null) {
			con = dataSource.getConnection();
			tl.set(con);
		}
		return con;
	}

	// 开启事务
	public static void startTransaction() throws SQLException {
		Connection con = getConnection();
		if (con != null) {
			con.setAutoCommit(false);
		}
	}

	// 事务回滚
	public static void rollback() throws SQLException {
		Connection con = getConnection();
		if (con != null) {
			con.rollback();
		}
	}

	// 提交并且 关闭资源及从ThreadLocall中释放
	public static void commitAndRelease() throws SQLException {
		Connection con = getConnection();
		if (con != null) {
			con.commit(); // 事务提交
			con.close();// 关闭资源
			tl.remove();// 从线程绑定中移除
		}
	}

	// 关闭资源方法
	public static void closeConnection() throws SQLException {
		Connection con = getConnection();
		if (con != null) {
			con.close();
		}
	}

	public static void closeStatement(Statement st) throws SQLException {
		if (st != null) {
			st.close();
		}
	}

	public static void closeResultSet(ResultSet rs) throws SQLException {
		if (rs != null) {
			rs.close();
		}
	}

}

queryrunner介绍

然后如上面注册功能dao层数据库访问时,就可以优化为

public int regist(User user)  {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "insert into user values(?,?)";
int update = runner.update(sql, user.getUsername(),user.getPassword());//时间Date类转换了也可以get
return update;//获得更新条数

}

3前端jquery条件限制扩展-validate插件

validate介绍

基本写在里面了,

前台作限制,后台记得也要,无非是if,else

4填写邮箱点激活码邮件激活

会用不懂先不写。。。



总之,一个粗糙的注册功能就这样写好了,

一般service,dao是个接口,下面还有个impl实现类?









  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值