结对编程之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();
    }
}

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;
        }
    }
}

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

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

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

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

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

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

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

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

心得与收获:

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

原文地址:https://www.cnblogs.com/wangzhiwang/p/11601045.html

时间: 2024-08-03 20:15:19

结对编程之JavaWeb实现的相关文章

结对编程之二

结对对象:王足英 对方博客:http://www.cnblogs.com/wangzuying/p/5406306.html 贡献比例:1:1 结对方式:电脑编程,王足英负责写代码我主要提供思路并检查错误 结对图片: 同伴优点:细心认真,容易沟通和交流 题目要求: 构造程序,分别是: •不能触发Fault. •触发Fault,但是不能触发Error. •触发Error,但是不能产生Failure. 问题描述: 假设默认长度单位为米,编写一个计算为各种形状着色花费的程序. 部分代码如下: 1 pa

结对编程之Fault、Error、Failure

1.结对说明 结对对象:刘世麟  博客地址:http://www.cnblogs.com/liushilin/ 双方贡献:1:1 2.题目要求 构造程序,分别是: •不能触发Fault. •触发Fault,但是不能触发Error. •触发Error,但是不能产生Failure. 3.题目概述 提示用户输入两个值,两个值必须在[0,100],若不满足条件各自有自己的提示,若两个值都小于5,则输出all input less than 5,程序退出.否则根据输入的值判断使用加法还是减法,若输入的第一

结对编程之带UI的中小学数学学习软件

结对编程总结 本次结对编程是以程延博同学的代码为基础修改而成的. 个人项目的复用: 结对编程中的出题逻辑直接使用了原个人项目中的出题代码,只是在其上添加了计算算式结果的代码. 在结对编程中新增添的部分包括: 登录,注册,设置密码修改密码,题目显示,结果显示等界面 算式的结果计算和分数统计 密码的设置存储和修改 手机验证码注册功能 密码格式,手机号有效性,题目数量范围等的检测 一些经验总结和教训:        界面: 界面使用的javaSwing,认识了一系列API和类,包括像BorderLay

结对编程之带UI的小初高数学学习软件

功能要求: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-10位,必须含大小写字母和数字.用户在登录状态下可修改密码,输入正确的          原密码,再输入两次相同的新密码后修改密码成功: 3.密码设置成功后,跳转到选择界面,界面显示小学.初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量: 4.用户输入题目数量后,生成一张试卷(同一张卷子不能

学习编程之Python篇(一)

第一次接触编程,你将面对两大难题: 1.  对所要使用的编程语言的语法和语义不甚了了. 2.  不知道如何通过编程来解决问题. 作为一名新手,你会尝试同时来解决这两个难题:一边熟悉编程语言的语法语义,一边考虑如何靠编程解决问题.这是一个循序渐进的过程,万事开头难,务必保持耐心,切勿操之过急. 学习编程其实没有什么捷径可走,最好的方法就是反复操练,聆听规则,讨论方法,都不如真正做点什么. 在掌握了一些编程语言的语法语义之后,接下来的难题就是怎样才能写出好的程序.那么,我们首先来看看什么是好的程序.

linux网络编程之shutdown() 与 close()函数详解

linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 [cpp] view plain copy print? <span style="font-size:13px;">#include<unistd.h> int 

C++混合编程之idlcpp教程Python篇(8)

上一篇在这 C++混合编程之idlcpp教程Python篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial6中,同样加入了四个文件:PythonTutorial6.cpp, Tutorial6.cpp, Tutorial6.i, tutorial6.py.其中PythonTutorial6.cpp的内容基本和PythonTutorial5.cpp雷同,不再赘述.首先看一下Tutorial6.i的内容: #import "../../p

QT核心编程之Qt线程 (c)

QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类.线程安全传递事件的方式和全局Qt库互斥量允许你从不同的线程调用Qt的方法.Qt中与线程应用相关的类如表6所示. 表6 Qt中与线程相关的类 使用线程需要Qt提供相应的线程库的支持,因此,在编译安装Qt时,需要加上线程支持选项. 当在Windows操作系统上编译Qt时,线程支持是在一些编译器上的一个

C++混合编程之idlcpp教程Python篇(4)

上一篇在这 C++混合编程之idlcpp教程Python篇(3) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程PythonTutorial2中,同样加入了三个文件 PythonTutorial2.cpp, Tutorial2.i, tutorial2.py.其中PythonTutorial2.cpp的内容基本和PythonTutorial1.cpp雷同,不再赘述.首先看一下Tutorial2.i的内容: namespace tutorial { struct Poi