设计一个以java web技术为基础的动态网站

1.基本要求:该网站必须采用MVC设计模式;使用MySQL数据库存储数据,用JDBC操作数据库;功能齐全、结构完整;操作简便。
2.功能模块:除用户模块外,还应包含至少一个能实现该主题网站的基本功能模块。

请看:简单的Javaweb项目(mvc模式,数据库用MySQL)jsp+MySQL+servlet :https://blog.csdn.net/bueke/article/details/103478054

如有帮助,望采纳


1.首先数据库连接池C3P0的一些实现需要导五个开源的架包:

c3p0-0.9.1.2.jar

commons-dbcp-1.4.jar

commons-dbutils-1.3.jar

commons-pool-1.5.5.jar

mysql-connector-java-5.1.6-bin.jar

---------------------------------------------------------------------------

2.连接数据库连接池的文件为:在src目录下建立XML文件c3p0-config.xml;

root

lxn123

com.mysql.jdbc.Driver

jdbc:mysql:///test

5

10

10

50

20

5

---------------------------------------------------------------------------

3.连接数据库连接池的类:JdbcUtils

public class JdbcUtils {

//释放connection连接

public static void releaseConnection(Connection connection){

try {

if (connection!=null) {

connection.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

//该静态代码块只执行一次

private static ComboPooledDataSource dataSource=null;

static{

//通过配置文件实现数据库的连接,只能被创建一次

dataSource=new ComboPooledDataSource("mvcapp");

}

//获取数据库连接,返回数据源的Connection对象

public static Connection getConnection() throws SQLException{

return dataSource.getConnection();

}

}

---------------------------------------------------------------------------

4.建立一个测试类(建立方法类似于class的建立,在src,所在包下建立,建立时找java下的JUnit,建立就行了):JdbcUtilsTest类,对数据库连接池进行测试,看是否连接成功!!!

public class JdbcUtilsTest {

//测试类包,测试数据库是否连接成功

@Test

public void testGetConnection() throws SQLException{

Connection connection=JdbcUtils.getConnection();

System.out.println(connection);

}

}

---------------------------------------------------------------------------

5.java是以面向对象的思想编程的,所以建立customer类,CriteriaCustomer类,对数据库里面的属性进行封装处理,便于后边功能调用的实现

customer类:对数据库里面的属性进行封装处理

public class Customer {

//建立了一个Customer类,对id,name,address,phone这些属性进行封装

private Integer id;

private String name;

private String address;

private String phone;

public Customer() {

super();

}

public Customer( String name, String address, String phone) {

this.name = name;

this.address = address;

this.phone = phone;

}

public Customer(Integer id, String name, String address, String phone) {

super();

this.id = id;

this.name = name;

this.address = address;

this.phone = phone;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

@Override

public String toString() {

return "Customer [id=" + id + ", name=" + name + ", address=" + address + ", phone=" + phone + "]";

}

}

-------------------

CriteriaCustomer类:模糊查询的类

//模糊查询的类

public class CriteriaCustomer {

private String name;

private String address;

private String phone;

public CriteriaCustomer() {

super();

}

public CriteriaCustomer(String name, String address, String phone) {

super();

this.name = name;

this.address = address;

this.phone = phone;

}

public String getName() {

if (name==null) {

name="%%";

}

else{

name="%"+name+"%";

}

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

if (address==null) {

address="%%";

}

else{

address="%"+address+"%";

}

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getPhone() {

if (phone==null) {

phone="%%";

}

else{

phone="%"+phone+"%";

}

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

}

---------------------------------------------------------------------------

6.在该包下建立一个接口类(创建时找interface,创建):CustomerDAO,里边封装了一些方法:

(1)模糊查询方法

(2)查询的方法

(3)插入数据

(4)通过jsp超链接里面?后面的id,获取id值的方法

(5)通过jsp超链接里面?后面的id,并且实现删除的方法

(6)查村和该name值相等的个数的方法

(7)修改方法

//创建以CustomerDAO接口,可以实现其他类的调用

public interface CustomerDAO {

//模糊查询方法,通过输入的字符,查看数据表里的数据里,是否包含这些字符,

public List getForListWithCriteriaCustomer(CriteriaCustomer cc);

//查询的方法,将数据库的所有数据放在list集合中,并实现输出的查询

public List getAll();

//插入数据,在页面上输入数据name,address,phone,就直接插入

public void save(Customer customer);

//通过jsp超链接里面?后面的id,获取该id下的各属性的值

public Customer get(Integer id);

//通过jsp超链接里面?后面的id,并且实现删除的功能

public void delete(Integer id);

//返回和该name相等的个数

public long getCountWithName(String name);

//修改的方法

void update(Customer customer);

}

---------------------------------------------------------------------------

7.建立一个DAO类,封装了基本的增删改查方法,以供子类继承使用; 当前DAO没有事务,直接在方法中获取数据库的链接

(1)类的构造方法,用到了反射,便有后面Servlet类实现*.do的操作

(2)返回数据库里面一条记录的值:比如返回某一条记录的customerName,或返回有多少条记录

(3)返回所对应的list集合,获得的是数据库的所有记录值

(4)返回对应的T的一个实体类的对象,该类泛型类的方法

(5)该方法封装了增删改操作,可实现对数据库中的数据进行增加,删除,修改操作

/*

* 封装了基本的增删改查方法,以供子类继承使用;

* 当前dao没有事务,直接在方法中获取数据库的链接

* */

public class DAO {

//这个是线程安全的

private QueryRunner queryRunner=new QueryRunner();

private Class clazz;

//类的构造方法

public DAO() {

//得到父类带泛型的类型

//type类型导包为import java.lang.reflect.Type;反射类型里面的

//反射。。。。。。Type所有超级类接口,ParameterizedType表示参数化类型,参数化类型在反射方法首次需要时创建(在此包中指定)。

//当创建参数化类型 p 时,p 实例化的一般类型声明会被解析,并且按递归方式创建 p 的所有类型参数。

//superClass instanceof ParameterizedType,判断superClass是否为首次出现的该类型,instanceof是用法,参数,例子的意思;

Type superClass=getClass().getGenericSuperclass();

if (superClass instanceof ParameterizedType) {

ParameterizedType parameterizedType=(ParameterizedType) superClass;

// getActualTypeArguments():返回表示此类型实际类型参数的 Type 对象的数组。

Type[] typeArgs=parameterizedType.getActualTypeArguments();

if (typeArgs!=null && typeArgs.length>0) {

if (typeArgs[0] instanceof Class) {

clazz=(Class) typeArgs[0];

}

}

}

}

//返回数据库里面一条记录的值:比如返回某一条记录的customerName,或返回有多少条记录

public E getForValue(String sql,Object...args){

Connection connection=null;

try {

connection=JdbcUtils.getConnection();

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

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.releaseConnection(connection);

}

return null;

}

//返回所对应的list集合,获得的是数据库中所有数据的集合

public List getForList(String sql,Object...args){

Connection connection=null;

try {

connection=JdbcUtils.getConnection();

return queryRunner.query(connection,sql,new BeanListHandler<>(clazz),args);

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.releaseConnection(connection);

}

return null;

}

//返回对应的T的一个实体类的对象

public T get(String sql,Object...args){

Connection connection=null;

try {

connection=JdbcUtils.getConnection();

return queryRunner.query(connection,sql,new BeanHandler<>(clazz),args);

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.releaseConnection(connection);

}

return null;

}

//该方法封装了增删改操作

public void update(String sql,Object...args){

Connection connection=null;

try {

connection=JdbcUtils.getConnection();

queryRunner.update(connection, sql, args);

} catch (Exception e) {

e.printStackTrace();

}finally {

JdbcUtils.releaseConnection(connection);

}

}

}

---------------------------------------------------------------------------

8.CustomerDAOJdbcImpl类,继承了父类DAO和继承了接口CustomerDAO,及可获得父类DAO的非构造方法,和接口CustomerDAO封装的方法,并在此类中将接口封装的方法加以实现

CustomerDAOJdbcImpl extends DAO implements CustomerDAO

//实现各个功能的类

public class CustomerDAOJdbcImpl extends DAO implements CustomerDAO{

@Override

//模糊查询的方法

public List getForListWithCriteriaCustomer(CriteriaCustomer cc) {

String sql="select id,name,address,phone from customer "

+ "where name like ? and address like ? and phone like ?";

//修改了CriteriaCustomer的get方法,使其返回的字符串中含有%%

return getForList(sql,cc.getName(),cc.getAddress(),cc.getPhone());

}

@Override

//获取整个数据库中的所有数据

public List getAll() {

String sql1="select id,name,address,phone from customer";

return getForList(sql1);

}

@Override

//插入数据到数据库的方法

public void save(Customer customer) {

String sql2="insert into customer(name,address,phone) values(?,?,?)";

update(sql2, customer.getName(),customer.getAddress(),customer.getPhone());

}

@Override

//获取某个数据

public Customer get(Integer id) {

String sql3="select id,name,address,phone from customer where id=?";

return get(sql3,id);

}

@Override

//删除id=?的数据

public void delete(Integer id) {

String sql4="delete from customer where id=?";

update(sql4, id);

}



推荐一个非常的开源平台的给你,部署简单,特别适合入门,若依开发框架,地址:https://gitee.com/y_project/RuoYi

个人认为楼上的两位说的对,如果不是为了纯粹的写论文或者搞清楚原理,完全可以使用现成的框架来做网站,少了很多bug,效率也高