书城项目总结

32 篇文章 5 订阅
10 篇文章 3 订阅

俩天利用空闲时间把书城项目的第二个阶段给弄了,过程很曲折,但最后还是搞好了,尽管看上去有点破碎,但总归是好的,下面利用外卖没到的时间总结一波,纪念下第一次搞这么大的项目!!!

首先是总体框架的:

搭建书城项目开发环境

 第二个阶段只要是和数据库建立连接来判断用户注册登录的合法性!

首先是用户类的创建:

接着是数据库的连接,在进行之前我首先进行了book 数据库的创建,接着建立一张表,来放用户的数据,即id username passwor email 这些,创建的时候把id作为主键,其他字段的话用户名限制为unique ,not null  其他的设置为not null 就可以了。

完成这些准备以后就是数据库连接池的玩意了,我使用了德鲁伊连接池,在这里我遇到了一个非常麻烦的玩意那就是配置文件的读取,之前是一直胡乱放一个地方,跳坑里面去了,不应该这样子,最后我上网查,成功解决了,那就是把这玩意放在resours里面,才能读得到!

 配置文件信息:

username=root
password=root
url=jdbc:mysql://localhost:3306/book?useSSL=false&serverTimezone=UTC
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=5
maxActive=10

哦对了,还有就是jar包放入的位置也该放在web_Inf中,建立也该lib放他进去(注意也该将他们进行那玩意)

 接着是dao层的实现了,这里主要涉及了一些反射和泛型的玩意

#basedao

package com.atguigudb.dao;

import com.alibaba.druid.util.JdbcUtils;
import com.atguigudb.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;

public abstract class  basedao {
    private QueryRunner queryRunner=new QueryRunner();
    public int updata(String sql,Object...args) throws SQLException {
        Connection connection = null;
        try {
            connection = jdbcutils.getConnection();
            return  queryRunner.update(connection,sql,args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcutils.close(connection);
        }
        return -1;
    }

    public  <T> T queryForOne(Class<T> type,String sql,Object...args) throws SQLException {
        Connection connection=null;
        try {
            connection=jdbcutils.getConnection();
            return queryRunner.query(connection,sql, new BeanHandler<T>(type),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcutils.close(connection);
        }
        return null;
    }

    public <T> List<T> queryForlist(Class<T> type,String sql,Object...args) throws SQLException {
        Connection connection=jdbcutils.getConnection();
        try {

            return queryRunner.query(connection,sql, new BeanListHandler<T>(type),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcutils.close(connection);
        }
        return null;
    }
    public Object querylevalues(String sql,Object...args) throws SQLException {Connection connection=null;
        try {
            connection=jdbcutils.getConnection();
            return queryRunner.query(connection,sql,new ScalarHandler(),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcutils.close(connection);
        }
        return null;
    }

}

 #usedao

package com.atguigudb.dao;

import com.atguigudb.pojo.User;

import java.sql.SQLException;

public class usedao extends basedao implements userdao {

    @Override
    public User queryByUsername(String username) throws SQLException {
        String sql="select id,username,password,email from t_user where username=?";
        return queryForOne(User.class,sql,username);
    }

    @Override
    public User queryByUsernamepassword(String name,String password) throws SQLException {
        String sql="select id,username,password,email from t_user where username=? and password=?";
        return queryForOne(User.class,sql,name,password);
    }

    @Override
    public int save(User user) throws SQLException {
        String sql="insert into t_user(username,password,email)values(?,?,?)";
        return updata(sql,user.getUsername(),user.getPassword(),user.getEmail());
    }
}

#接口 

package com.atguigudb.dao;

import com.atguigudb.dao.basedao;
import com.atguigudb.pojo.User;

import java.sql.SQLException;

public interface userdao {

    /**
     * 根据用户名查看合法性,
     * @return 如果不合法返回null
     */
    public User queryByUsername(String name) throws SQLException;

    /**
     * 根据用户名查看合法性,
     * @return 如果不合法返回null,没有这个用户
     */
    public User queryByUsernamepassword(String name,String password) throws SQLException;

    public  int save(User user) throws SQLException;
}
package com.atguigudb.imp;

import com.atguigudb.pojo.User;

import java.sql.SQLException;

public interface userser {

    /**
     * 注册用户
     * @param user
     */
    public void regiser(User user) throws SQLException;

    /**
     *
     * 登录密码和账户的检查
     * @param user
     * @return
     */
    public User login(User user) throws SQLException;

    /**
     *  查看用户名是不是存在
     * @param user
     * @return
     */
    public boolean exitname(String name) throws SQLException;
}

package com.atguigudb.imp;

import com.atguigudb.dao.usedao;
import com.atguigudb.pojo.User;

import java.sql.SQLException;

public class useseve implements  userser{

    private usedao usedao=new usedao();
    @Override
    public void regiser(User user) throws SQLException {
        usedao.save(user);
    }

    @Override
    public User login(User user) throws SQLException {
        return usedao.queryByUsernamepassword(user.getUsername(),user.getPassword());

    }

    @Override
    public boolean exitname(String name) throws SQLException {
        if(usedao.queryByUsername(name)==null)
        {
            return false;
        }
        else return true;
    }
}

package com.atguigudb.utils;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.util.JdbcUtils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class jdbcutils {

    private static DruidDataSource dataSource;

    static {
        Properties properties = new Properties();

        try {
            InputStream resourceAsStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            properties.load(resourceAsStream);
            //创建数据库连接池
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection()  {
        Connection conn=null;
        try {
            conn = dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return conn;
    }
    public static void close(Connection conn) throws  SQLException
    {
        conn.close();
    }
}

 接下来就是最重要的web层面的实现

在这里开始之前我们在这个工程下面采用base  固定先对路径

把注册表中action改为post请求

web层的请求也也该是post请求

 <base href="http://localhost:8080//bookitem_war/">

 

改了以后,记得这时候是在工程路径下面了,在跳转其他链接,资源的时候千万千万不要加 / 

那样子你会死的很惨,我就是,苦死我了阿

在注册,登录 跳转的时候要有/

下面是具体

login和register的玩意

public class register extends HttpServlet {



    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       useseve use=new useseve();
     String name = req.getParameter("username");
       String password = req.getParameter("password");
       String email = req.getParameter("email");
       String code = req.getParameter("code");

      System.out.println("get");
        if("abcd".equalsIgnoreCase(code))
        {
            try {
                if(use.exitname(name)==true)
                {
                    System.out.println("账号名已经存在");
                    req.getRequestDispatcher("/pages/user/regist.html").forward(req,resp);
                }
                else {
                    use.regiser(new User(null,name,password,email));
                    req.getRequestDispatcher("/pages/user/regist_success.html").forward(req,resp);
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        else {
            System.out.println("验证码错误");
            req.getRequestDispatcher("/pages/user/regist.html").forward(req,resp);
        }
    }


}

public class login extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        useseve use=new useseve();
        String name=req.getParameter("username");
        String password = req.getParameter("password");
        try {
            if(use.login(new User(null,name,password,null))!=null)
            {
                req.getRequestDispatcher("/pages/user/login_success.html").forward(req,resp);
            }
            else
            {
                req.getRequestDispatcher("/pages/user/login.html").forward(req,resp);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}

 配置文件如下servele配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>register</servlet-name>
        <servlet-class>com.atguigudb.web.register</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>register</servlet-name>
        <url-pattern>/register</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.atguigudb.web.login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    
    
</web-app>

妈蛋,赶紧吃饭了

request.getParameter()方法:1.获取通过http协议提交过来的数据.       通过容器的实现来取得通过get或者post方式提交过来的数据

2.request.getParameter()方法传递的数据,会从web客户端传到web服务器端,代表HTTP请求数据,该方法返回String类型的数据

request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段

request.getAttribute()方法返回request范围内存在的对象


request.setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部

HttpServletRequest 类有 setAttribute() 方法,而没有setParameter() 方法
一般通过表单和链接传递的参数使用getParameter
 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个风轻云淡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值