结对编程之JavaWeb实现

Tips:

https://shihuan.site/OnlinePaper/jsp/

这是最后实现所有功能的测试网址,欢迎大家登陆进行测试,但由于注册短信条数有限,所以提供一个测试账号进行测试

账号:Zhiwang

密码:123456Aa

 界面展示:

环境选择:由于本学期选修了javaee课程,同时许多课程课程设计都需要进行网站设计,同时我们小组选择的项目也需要用到Web项目,所以选择了java作为开发环境进行本次结对编程项目开发,同时也算是检验javaee学习的效果

 

前端:HTML+CSS+BOOTSTRAP

主要是利用bootstrap进行前端设计

后端:Servlet+Tomcat+JavaBean+JDBC+Ajax

感觉就是将这段时间Javaee课程项目进行了实践

 

我主要参与的是登陆与注册页面的编写以及题目得出答案计算部分设计内容

登陆部分:

 

使用JDBC数据库,使用阿里的Durid连接池与数据库进行连接,加载配置文件

 

package JDBCUtils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

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

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}
View Code

user类中包含了账号和密码以及对应的get方法与set方法

package user;

public class User {
    private  int id;
    private  String username;
    private  String password;


    public void setId(int id) {
        this.id = id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
User
    public User login(User loginUser){
        try {
            //1.编写sql
            String sql = "select * from user where username = ? and password = ?";
            //2.调用query方法
            User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),
                    loginUser.getUsername(), loginUser.getPassword());


            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();//记录日志
            return null;
        }
    }
}
View Code

UserDao中利用template以及 BeanPropertyRowMapper类进行sql语句的查询,返回查询结果并且封装至user类中

 

 将登陆页面表单提交action设置为loginServlet,当表单提交时通过request.GetParameter()方法获取账号密码并且封装至user,再利用userDao进行查询,若为空则证明查询错误,登陆失败。

注册页面的原理也大致相同,不同之处是验证码的发送。这里采用的是阿里云SendSMS函数,具体的发送短信流程如下:

在本机产生随机验证 码--------->将随机验证码利用阿里云的jar包封装好的函数发至手机----------->将验证码存入request  Session()中---------->比对用户输入与Session中存储是否相同,如若相同,则提交当前注册表单,封装为user进行注册。

 

 

 

其中前端注册过程中账号密码验证利用的是JavaScript的正则表达式验证方法,若验证成功再提交表单,提升了用户的体验感以及减少服务器的负担。

 

 

 

 

感觉此次项目最困难的部分就是如何得出随机产生题目所得的答案。在这部分对之前两个人的代码进行了重新的完善以及修改和简化,生成了便于计算出答案的计算式。最后想到利用

JavaScript函数中的eval()脚本将随机得出的算式当作脚本执行得到最后的答案,所以我们必须将得到算式中三角函数值,除法以及根号替换成可以直接计算的表达式,同时为了减少工作难度(因为在存在多个括号的情况下十分困难)我们规定算式中只能出现一个括号进行简化,计算出最后得到答案。

 

 

同时我们增加了一些功能如得到历史题目等等

 

心得与收获:

  这次项目果真是一次“做中学”的项目。根据所需要的功能学习相关的javaee内容,虽然现在看起来需要的技术也不困难,但在学习并且实践的过程中还是遇到了一些麻烦。同时结对编程的过程中也互相学习,查缺补漏,为后面的团队项目先打下基础。

猜你喜欢

转载自www.cnblogs.com/wangzhiwang/p/11601045.html