您的位置:首页 > 编程语言 > Java开发

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

2018-02-23 16:50 369 查看
目前主流在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 SQLExcept
a080
ion {
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实现类?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javaweb