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)
先不加任何限制,把注册数据存进数据库
view:
<form action="/resigterServlet" >
<input type="name" name="user">
<input type="password" name="password">
.....(手机,姓名,邮箱)
<input type="submit" value="submit">
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);
}
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实现类?
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实现类?
相关文章推荐
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- javaweb商城之后端(无框架)(二)界面,商品显示功能
- 从零开始写javaweb框架笔记15-搭建轻量级JAVAWEB框架-实现依赖注入功能
- Java Web 案例一 登录、注册功能实现
- Java web 注册登录功能实现简介
- 【JavaWeb_Part07】功能堪比 502 的强大粘合剂?Spring(春天)框架表演秀
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- 关于JavaWeb如何实现用户注册 后台即时提醒(类似站内信功能)
- JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
- 从零开始写javaweb框架笔记15-搭建轻量级JAVAWEB框架-实现依赖注入功能
- JAVA应用XFire框架来实现WebServie的大文件传输功能之二(上传)
- Java_Web三大框架之Hibernate+jsp+selvect+HQL注册用户
- 徒手用Java来写个Web服务器和框架吧<第三章:Service的实现和注册>
- 【从零写javaweb框架】(五)实现依赖注入功能
- 【java web】springMVC框架实现用多选框批量删除表数据功能
- JAVA_WEB项目之Lucene检索框架实现增删查改的代码优化以及分页功能实现
- JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
- 在Java Web开发框架中创建VoiceXML页面-扩展 Java 驱动的 VoiceXML 应用程序
- Java Web开发框架:Apache Wicket 1.3发布
- EasyJWeb 【Java开源Web开发框架】