当前位置: 首页 > news >正文

做网站推广员需要/seo网络贸易网站推广

做网站推广员需要,seo网络贸易网站推广,广州住房和城乡建设部网站,新疆生产建设兵团考试信息网站5.2 创建用户注册和登录所需要的数据库和表 打开MySQL命令行窗口。输入如下所示的MySQL命令,生成我们的数据库和表,其中“sharm”为项目管理员。 #我的目的是创建一个包含ID号(自增)、用户名、密码、邮箱的表 #1 创建一个名为sh…

5.2 创建用户注册和登录所需要的数据库和表


打开MySQL命令行窗口。输入如下所示的MySQL命令,生成我们的数据库和表,其中“sharm”为项目管理员。

#我的目的是创建一个包含ID号(自增)、用户名、密码、邮箱的表

#1 创建一个名为sharm_schema数据库

drop database if exists sharm_schema;

create database sharm_schema;

#1 创建一个名为book的表

use sharm_schema;

create table book(

#2 初始话定义不同变量

#其中ID为自增;用户名唯一且非空;密码非空;邮箱没有要求

id int primary key auto_increment,

username varchar(20) not null unique,

password varchar(32) not null ,

email varchar(100)

);

insert into book(username,password,email) values(‘sharm’,‘123456’,‘share_me@126.com’);

select * from book;

5.3 创建数据库对应的JavaBean对象


在sharm.pojo中创建User类,输入如下代码,从而创建JavaBean对象。

package sharm.pojo;

/**

  • 数据库表对应的JavaBean类

*/

public class User {

/*因为Int类的默认值为0,而Integer的默认值为null/

private Integer id;

private String username;

private String password;

private String email;

//无参构造器

public User() {

}

//有参构造器

public User(Integer id, String username, String password, String email) {

this.id = id;

this.username = username;

this.password = password;

this.email = email;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

@Override

public String toString() {

return “User{” +

“id=” + id +

“, username=’” + username + ‘’’ +

“, password=’” + password + ‘’’ +

“, email=’” + email + ‘’’ +

‘}’;

}

}

6 编写工具类JdbcUtils

===================================================================================

6.1 导入需要的jar包


由于项目需要,所以需要导入如下图所示的五个jar包,jar包的下载地址见第二章末尾【链接】。

在这里插入图片描述

图2.3 项目需要的jar包

6.2 jar包在IDEA中的导入方式


1)将下载好的jar包复制到新建的lib目录下

在这里插入图片描述

2)点击IDEA菜单栏File-Project Structure,然后进行如下操作,然后先不把它加入到模块中

在这里插入图片描述

3)点击Modules,选择需要放入lib的模块,按照如下添加library

在这里插入图片描述

4)上一步完成后,点击Artifacts,给他fix一下

在这里插入图片描述然后就可以发现添加进来的包前面有了标记,有标记就可以用了。

6.3 在src源码目录下编写jdbc.properties属性配置文件


在src源码目录下新建名为jdbc.properties的文件,然后在其中书写如下所示代码。该属性配置文件是为了连接数据库,所以其中的参数需要与自身的数据库的参数相对应。

//为了防止程序出现错误,在书写该配置文件时请删掉注释

username=root //MySQL数据库用户名

password=123456 //MySQL数据库密码

url=jdbc:mysql://localhost:3306/sharm_schema?useUnicode=true&characterEncoding=utf8

//上面这句如果不在url后加入?useUnicode=true&characterEncoding=utf8这句,则会出现编码错误

driverClassName=com.mysql.jdbc.Driver

initialSize=5

maxActive=10

7 编写JdbcUtils工具类

===================================================================================

在sharm.utils工具包中新建一个JdbcUtils工具类。该工具类的目的是为了创建数据库连接池,同时获取数据库连接池中的连接与关闭。代码如下所示:

package sharm.utils;

import com.alibaba.druid.pool.DruidDataSource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Properties;

public class JdbcUtils {

private static DruidDataSource dataSource;

//初始化块会在“创建类的实例时”执行,而静态初始化块值会优先普通初始化块执行,且执行一次

//还有一种方法,在类中加入一个main方法,main方法一执行,类就会执行,那么代码块就会执行

static {

try {

Properties properties = new Properties();

// 读取 jdbc.properties属性配置文件

InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream(“jdbc.properties”);

// 从流中加载数据

properties.load(inputStream);

// 创建数据库连接池

dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

  • 获取数据库连接池中的连接

  • @return 如果返回null,说明获取连接失败
    有值就是获取连接成功

*/

public static Connection getConnection(){

Connection conn = null;

try {

conn = dataSource.getConnection();

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

/**

  • 关闭连接,放回数据库连接池

  • @param conn

*/

public static void close(Connection conn){

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

7.1 JdbcUtils工具类的测试


在实际开发环境中,我们需要对类的功能进行测试。这里,我们在sharm.text目录下新建JdbcUtilsTest测试类,代码如下所示,从而完成测试。

package sharm.test;

import sharm.utils.JdbcUtils;

import org.junit.Test;

import java.sql.Connection;

/**

  • 测试数据库连接池的连接与关闭

*/

public class JdbcUtilsTest {

@Test

public void testJdbcUtils(){

//for循环的方法就是获取100次连接池的连接

for (int i = 0; i < 100; i++){

Connection connection = JdbcUtils.getConnection();

System.out.println(connection);

//数据库的连接池每次用完一定要释放

JdbcUtils.close(connection);

}

}

}

8 编写Dao持久层

=============================================================================

8.1 编写BaseDao抽象类


该类为Dao持久层的超类,其定义了与数据库交互的具体行为,但其本生不需要对象实例,所以设置其为抽象类。在sharm.dao.imp包下新建BaseDao抽象类,代码如下所示:

package sharm.dao.impl;

import sharm.utils.JdbcUtils;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanHandler;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.List;

/**

  • 只负责和数据库交互,如增删改查

  • BaseDao类是给别人复制代码的,所以不需要对象实例,所以设置其为抽象类

  • @author Sharm

*/

public abstract class BaseDao {

//DbUtils操作数据库

private QueryRunner queryRunner=new QueryRunner();

/**

  • update() 方法用来执行:Insert\Update\Delete语句

  • @return 如果返回-1,说明执行失败
    返回其他则表示增加的行数(这一部分是源码)

*/

public int updata(String sql,Object… args){

Connection connection = JdbcUtils.getConnection();

//sql语句;sql语句中的值,可变长参数

try {

return queryRunner.update(connection,sql,args);

} catch (SQLException e) {

e.printStackTrace();

} finally {

JdbcUtils.close(connection);

}

return -1;

}

/**

  • 先验知识:1)泛型:J2SE 1.5中新增了"泛型"的机制,可以在一定条件下把一个类型参数化。

  • 例如,可以在编写一个类的时候,把一个方法的形参的类型用一个标识符(如T)来代表,

  • 至于这个标识符到底表示什么类型,则在生成这个类的实例的时候再行指定。这一机制可以

  • 用来提供更充分的代码重用和更严格的编译时类型检查。不过泛型机制却不能和个数可变的形参配合使用。

  •      2)可变参数:本质上还是数组
    
  • @param type 返回的对象类型

  • @param sql 执行的sql语句

  • @param args sql对应的参数值

  • @param 返回的类型的泛型。第一个表示是泛型;第二个表示返回的是T类型的数据;第三个限制参数类型为T

  • @return

*/

public T queryForOne(Class type,String sql,Object… args){

Connection con = JdbcUtils.getConnection();

try {

//查询时,query中BeanHandler中的type类型就是执行后返回参数的类型

return queryRunner.query(con,sql,new BeanHandler(type),args);

} catch (SQLException e) {

e.printStackTrace();

} finally {

JdbcUtils.close(con);

}

return null;

}

/**

  • 查询返回多个javaBean的sql语句

  • @param type 返回的对象类型

  • @param sql 执行的sql语句

  • @param args sql对应的参数值

  • @param 返回的类型的泛型

  • @return

*/

public List queryForList(Class type, String sql, Object… args) {

Connection con = JdbcUtils.getConnection();

try {

return queryRunner.query(con, sql, new BeanListHandler(type), args);

} catch (SQLException e) {

e.printStackTrace();

} finally {

JdbcUtils.close(con);

}

return null;

}

/**

  • 执行返回一行一列的sql语句

  • @param sql 执行的sql语句

  • @param args sql对应的参数值

  • @return

*/

public Object queryForSingleValue(String sql, Object… args){

Connection conn = JdbcUtils.getConnection();

try {

return queryRunner.query(conn, sql, new ScalarHandler(), args);

} catch (Exception e) {

e.printStackTrace();

} finally {

JdbcUtils.close(conn);

}

return null;

}

}

8.2 编写UserDao接口


在sharm.dao目录下新建一个UserDao接口,用于约束类必须实现的方法。代码如下所示:

//通过修改包名来移动接口的存放位置

package sharm.dao;

import sharm.pojo.User;

/**

  • 约束类必须实现的方法。注意:接口存放的位置

*/

public interface UserDao {

/**

    1. 验证用户名是否有效:即该用户名是否可以注册——根据用户名查询用户的信息
  • @param username 待查的用户名

  • @return 如果返回null,则该用户不存在;否则则返回用户信息

*/

public User queryUserByUsername(String username);

/**

    1. 将注册信息保存到数据库
  • @param user 待保存的用户信息

  • @return 返回-1表示操作失败,其他是sql语句影响的行数

*/

public int saveUser(User user);

/**

    1. 登录操作:根据用户名和密码查询用户信息(1和2是注册操作,3是登录操作)
  • @param username 待输入的用户信息

  • @param password 待输入的密码

  • @return 如果返回null,说明用户名或密码错误,反之亦然

*/

public User queryUserByUsernameAndPassword(String username, String password);

}

8.3 编写UserDaoImp实现类


在sharm.dao.impl包下新建UserDaoImp实现类,用于Dao持久层具体功能的实现,代码如下所示:

package sharm.dao.impl;

import sharm.dao.UserDao;

import sharm.pojo.User;

public class UserDaoImp extends BaseDao implements UserDao {

@Override

public User queryUserByUsername(String username) {

String sql=“select id,username,password,email from book where username=?”;

//继承的抽象超类的方法,直接使用

return queryForOne(User.class,sql,username);

}

@Override

public int saveUser(User user) {

String sql=“insert into book(username,password,email) values(?,?,?)”;

return updata(sql,user.getUsername(),user.getPassword(),user.getEmail());

}

@Override

public User queryUserByUsernameAndPassword(String username, String password) {

String sql=“select id,username,password,email from book where username = ? and password = ?”;

return queryForOne(User.class,sql,username,password);

}

}

8.4 编写UserDaoImpTest测试类


在sharm.test新建UserDaoImpTest测试类,用于测试UserDaoImp实现类的功能。代码如下所示:

package sharm.test;

import org.junit.Test;

import sharm.dao.impl.UserDaoImp;

import sharm.pojo.User;

import static org.junit.Assert.*;

public class UserDaoImpTest {

@Test

/**

  • 我的目的是为了测试这个方法是否可用,所以,我先实例化后这个方法,

  • 然后,在该对象上使用该方法来进行测试。

  • 原文是测试接口类,我是为了测试UserDaoImp类

*/

public void queryUserByUsername() {

UserDaoImp userDaoImp = new UserDaoImp();

if (userDaoImp.queryUserByUsername(“sharm”)==null) {

System.out.println(“该用户名可用”);

} else {

System.out.println(“该用户名已经存在”);

}

}

@Test

public void saveUser() {

UserDaoImp userDaoImp = new UserDaoImp();

//原来导入对象是用这个方法

System.out.println(userDaoImp.saveUser(new User(null,“haha”,“123456”,“zhiming@126.com”)));

}

@Test

public void queryUserByUsernameAndPassword() {

UserDaoImp userDaoImp = new UserDaoImp();

if ( userDaoImp.queryUserByUsernameAndPassword(“admin”,“admin1234”) == null) {

System.out.println(“用户名或密码错误,登录失败”);

} else {

System.out.println(“查询成功”);

}

}

}

编写测试类除了自己写一个测试文件的方法,还有一种IDEA的快捷键,即在实现类里,Ctrl+shift+T生成测试,具体选项如下图2.4所示:

在这里插入图片描述

图2.4 IDEA中快捷键生成测试类的选项

9 编写Service服务层

=================================================================================

9.1 编写UserService接口


在sharm.service包下新建UserService接口,该接口用于约束UserService实现类的具体功能,代码如下所示:

package sharm.service;

import sharm.pojo.User;

/**

  • 在业务层,我们有哪些业务呢?比如:登录是一个业务,注册是一个业务,检查是一个业务。那么接口就是规范好业务层需要进行的业务。

  • Service层的功能要与Dao层相对应

  • Dao层:queryUserByUsername → Service层:existsUsername

  • Dao层:saveUser → Service层:registUser

  • Dao层:queryUserByUsernameAndPassword → Service层:login

*/

public interface UserService {

/**

  • 检查用户名是否可用

  • @param username 待注册的用户名

  • @return 返回true表示用户名已存在,返回false表示用户名可用

*/

public boolean existsUsername(String username);

/**

  • @param user 待注册的用户

  • @return 若返回-1,则注册失败;返回其他则表示增加的行数

*/

public int registUser(User user);

/**

  • @param user 待登录的用户

  • @return 如果返回null,说明登录失败,返回有值,是登录成功

*/

public User login(User user);

}

9.2 编写UserServiceImp实现类


在sharm.service.impl包下新建UserServiceImp实现类,用于Service服务层具体功能的实现,代码如下所示:

package sharm.service.impl;

import sharm.dao.UserDao;

import sharm.dao.impl.UserDaoImp;

import sharm.pojo.User;

import sharm.service.UserService;

/**

  • Service业务层有两个功能:1)处理业务逻辑;2)调用dao持久层将信息保存到数据库

  • 1)功能在方法中体现出来了;那么现在要做的就是功能2)

*/

public class UserServiceImp implements UserService {

// private UserDao userDao=new UserDaoImp(); 原代码中运用了多态,但userDao会丢失子类的方法,不过由于子类没有增加方法,所以不影响

private UserDaoImp userDaoImp=new UserDaoImp();

@Override

public boolean existsUsername(String username) {

//强的,sharm,这都被你想出来了

return (userDaoImp.queryUserByUsername(username)!=null);

}

@Override

public int registUser(User user) {

return userDaoImp.saveUser(user);

}

@Override

public User login(User user) {

return userDaoImp.queryUserByUsernameAndPassword(user.getUsername(),user.getPassword());

}

}

10 编写Web层

============================================================================

10.1 实现用户的注册


1)图解用户注册的流程:

在这里插入图片描述

2)修改regist.html 和regist_success.html页面

由于前面有介绍,当不是用SSM框架时,我们的目录结构采用base+相对路径的方法,所以,我们需要修改HTML文件中的路径。同时,由于表单中存在密码,所以表单的上传方法需要修改doPost请求。修改形式如下代码所示,按照这种方式修改HTML页面中的所有路径。

尚硅谷会员登录页面

注意:如果由于HTML文本页面过长而导致无法找到所有待修改的路径时,可以先将工程部署到Tomcat服务器上,在浏览器中输入F12,在Network-Name下,标红的路径就是待修改的路径,如过未刷新,就在浏览器上刷新一下。在这里插入图片描述

图2.5 待修改路径的查找

3)搭建RegistServlet程序

http://www.jmfq.cn/news/5217967.html

相关文章:

  • 风水网站建设的策划书/黑帽seo联系方式
  • 罗岗网站建设公司/如何创建网站平台
  • 北京网站建设最便宜的公司哪家好/精准引流的网络推广
  • 梵讯企业网站建设/迅雷磁力链bt磁力天堂
  • 有那些做任务的网站/360上网安全导航
  • 互联网大会官网/常州seo关键词排名
  • 网页微信版会痕迹吗/赣州seo公司
  • 完善网站建设的方法/旺道网站排名优化
  • 有那个网站可以做任务赚钱吗/seo排名优化培训网站
  • 湖南长沙网站制作/自己怎么开发app软件
  • 鞍山网站设计/网络运营团队
  • 电商网站的建设/网络销售平台有哪些软件
  • 钟落潭有没有做网站的/软文代写平台
  • 宁夏做网站好的公司/游戏特效培训机构排名
  • 100个有趣的网站/深圳关键词优化软件
  • 闲鱼上做网站/图片优化是什么意思
  • 栾城网站建设/一份完整的市场调查方案
  • 教育网站建设需求分析报告/友链查询站长工具
  • 商务 服务类网站模板/公司域名注册步骤
  • 各大网站推荐/互联网运营推广公司
  • 靠谱的深圳app开发公司/seo需要什么技术
  • 商务网站需求说明书/武汉seo管理
  • 网站做问卷调查的问题/seo 推广
  • php手机网站模板/武汉网站设计十年乐云seo
  • 做防水怎么注册网站/网络推广优化品牌公司
  • 网站建栏目建那些/灰色产业推广引流渠道
  • 网站编辑主要做什么/网站排名提高
  • 攻击网站的方法/室内设计培训哪个机构比较好
  • jeecms做企业网站/螺蛳粉的软文推广
  • 公司网站推广是做什么/推广软件赚钱的平台