最近在学习java,按照书上的例子尝试做一个前后台的web项目练习小程序。在这里记录一下我目前理解的javaweb项目制作的步骤和注意事项。如果有不妥的地方欢迎大家指正。
以查询商品列表为例:
第一步:分析具体问题,明确需求,建立数据库和数据表
根据具体的实际情况进行分析并确定对象和字段,根据对象建表。
我使用的是oracle,在Oracle数据库中建立T_MC表用来展示商品的详细信息,建立T_MC_TYPE表示商品的类型信息。
T_MC建表信息:
T_MC表中数据信息:
T_MC_TYPE建表信息:
T_MC_TYPE表中数据信息:
注意:建表时表名称和字段名称尽量使用大写英文。我当时使用的是小写,最后查表的时候还要给表名和字段名加上引号,导致sql语句看起来很混乱。
第二步:建立javaweb程序,明确项目文件的组织结构
1.建立 Dynamic Web project,命名为OnlineShop
2.在项目的二级目录添加src文件夹用来放.java文件,检查是否存在web.xml文件,
如果没有就右键项目名称--ava EE Tools--Generate Deployment descriptor stub
3.介绍一下目前使用到的文件夹:
1).src文件夹:放.java文件
2).WebContent--WEB-INF-lib文件夹:存放外部引用的jar包
注意,引用jar包不仅要把jar包存放在lib文件下,还要在Java Build path中添加勾选。
步骤:右击项目-Properties-Java Build Path。点击Libraries-Add External JARs...在选择项目中要用的jar包。然后点击
Order and Export勾选刚才添加的jar包。这样就可以在项目中使用这个jar包了。
第三步:定义数据传输/表现层对象(DTO/VO)
根据数据库中的数据表建立相关的类
1.建立MC.java
第四步:定义数据层操作接口(DAO接口)和实现类
DAO是数据访问对象,这里的数据层操作接口主要用于为上层的服务层接口提供对应的操作方法,使得上层逻辑可较快捷方便地访问底层数据库表。
1.MC的DAO接口McDAO.java(练习中只使用了前两个方法)
2.DAO接口的实现McDAOImpl.java(练习中只使用了前两个方法)
package com;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/*
*描述:通用商品信息访问接口实现类
*/
public class McDAOImpl implements McDAO{
private static McDAOImpl mcDAOImpl = new McDAOImpl();
private static final int PAGESIZE = 10;
private McDAOImpl(){}
public static McDAOImpl getInstance() {
return mcDAOImpl;
}
@Override
public int[] getResult(String nmaxId, String nminId, String keywords) {//根据指定的商品编号范围和关键字查询并返回商品编号列表
List
int recodeTotal = mcList.size();
int pageTotal = 0;
if(recodeTotal == 0){
pageTotal=0;
}else {
pageTotal = (recodeTotal-1)/PAGESIZE +1;
}
return new int[]{recodeTotal,pageTotal};
}
@Override
public List
ConnectJDBC connectJDBC = new ConnectJDBC();
List
try {
Connection conn = connectJDBC.getODBConnectione();
String sqlString = "SELECT T1.NID NID,SIMG,T1.SNAME ,T1.SNAME SNAME,NPRICE,SMCTAG,T2.SNAME MAXTYPE,T3.SNAME MINTYPE,DCDATE,SDESCRIPTION "
+ "FROM T_MC T1,T_MC_TYPE T2,T_MC_TYPE T3 WHERE T1.NMAXID=T2.NID AND T1.NMINID=T3.NID";
if (nmaxId !=null && !"0".equals(nmaxId)&& !"".equals(nmaxId)) {
sqlString = sqlString +" AND T1.NMAXID="+nmaxId;
}
if (nminId !=null && !"0".equals(nminId)&& !"".equals(nminId)) {
sqlString = sqlString +" AND T1.NMINID="+nminId;
}
System.out.println("Here1:"+sqlString);
ResultSet resultSet = null;
PreparedStatement pStmt = null;
pStmt = conn.prepareStatement(sqlString);
resultSet = pStmt.executeQuery();
while (resultSet.next()) {
String vnid=resultSet.getString("nid");
String vsimg=resultSet.getString("simg");
String vsname=resultSet.getString("sname");
String vnprice=resultSet.getString("nprice");
String vsmcTag=resultSet.getString("smcTag");
String vmaxType=resultSet.getString("maxType");
String vminType=resultSet.getString("minType");
String vdcDate=resultSet.getString("dcDate");
if (vdcDate !=null && !"".equals(vdcDate)) {
vdcDate = vdcDate.substring(0,19);
}
String vsdescription = resultSet.getString("sdescription");
Mc mc = new Mc();
mc.setNid(vnid);
mc.setSimg(vsimg);
mc.setSname(vsname);
mc.setNprice(vnprice);
mc.setSmcTag(vsmcTag);
mc.setNmaxId(vmaxType);
mc.setNminId(vminType);
mc.setDcDate(vdcDate);
mc.setSdescription(vsdescription);
mclisList.add(mc);
}
resultSet.close();
pStmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return mclisList;
}
@Override
public Mc selectSingleMc(int nid) {//根据商品编号得到一种商品信息
ConnectJDBC connectJDBC = new ConnectJDBC();
Connection conn;
Mc mc = new Mc();
try {
conn = connectJDBC.getODBConnectione();
String sql = "SELECT * FROM T_MC WHERE NID=?";
PreparedStatement pStmt = null;
ResultSet resultSet = null;
pStmt=conn.prepareStatement(sql);
pStmt.setInt(1, nid); //设置sql中的?的值
resultSet = pStmt.executeQuery();
if (resultSet.next()) {
mc.setNid(nid +"");
mc.setSname(resultSet.getString("sname"));
mc.setSdescription(resultSet.getString("sdescription"));
mc.setNprice(resultSet.getString("nprice"));
mc.setSimg(resultSet.getString("simg"));
mc.setSmcTag(resultSet.getString("smcTag"));
String dcDate = resultSet.getString("dcDate");
if (dcDate !=null && !"".equals(dcDate)) {
dcDate=dcDate.substring(0,19);
}
mc.setDcDate(dcDate);
mc.setNmaxId(resultSet.getString("nmaxId"));
mc.setNminId(resultSet.getString("nminId"));
}
resultSet.close();
pStmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return mc;
}
@Override
public boolean updateMc(Mc mc) {//更新指定的商品信息
boolean isSuccess = true;
ConnectJDBC connectJDBC = new ConnectJDBC();
try {
Connection conn = connectJDBC.getODBConnectione();
String sql = "UPDATE T_MC SET SNAME=?,SDESCRIPTION=?,NPRICE=?,SIMG=?,SMCTAG=?,DCDATE=?,NMAXID=?,NMINID=? WHERE NID=?";
PreparedStatement pStmt = conn.prepareStatement(sql);
pStmt.setString(1, mc.getSname());
pStmt.setString(2,mc.getSdescription());
pStmt.setString(3,mc.getNprice());
pStmt.setString(4,mc.getSimg());
pStmt.setString(5, mc.getSmcTag());
pStmt.setString(6, mc.getDcDate());
pStmt.setString(7, mc.getNmaxId());
pStmt.setString(8, mc.getNminId());
pStmt.setInt(9,Integer.parseInt(mc.getNid()));
isSuccess=pStmt.execute();
pStmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
isSuccess = false;
}
return isSuccess; //返回是否保存成功
}
@Override
public boolean insertMc(Mc mc) { //添加新的商品信息
boolean isSuccess = true;
ConnectJDBC connectJDBC = new ConnectJDBC();
try {
Connection conn = connectJDBC.getODBConnectione();
String sql = "INSERT INTO T_MC(SNAME,SDECRIPTION,NPRICE,SIMG,SMCTAG,DCDATE,NMAXID,NMINID,NID) VALUES(?,?,?,?,?,?,?,?,?)";
PreparedStatement pStmt = conn.prepareStatement(sql);
pStmt.setString(1, mc.getSname());
pStmt.setString(2,mc.getSdescription());
pStmt.setFloat(3,Float.parseFloat(mc.getNprice()));
pStmt.setString(4,mc.getSimg());
pStmt.setString(5, mc.getSmcTag());
pStmt.setString(6, mc.getDcDate());
pStmt.setString(7, mc.getNmaxId());
pStmt.setString(8, mc.getNminId());
pStmt.setInt(9,Integer.parseInt(mc.getNid()));
isSuccess=pStmt.execute();
pStmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
isSuccess = false;
}
return isSuccess; //返回是否插入成功
}
@Override
public boolean deleteMc(int nid, String contextPath) { //删除商品信息
boolean isSuccess = true;
ConnectJDBC connectJDBC = new ConnectJDBC();
try {
Connection conn = connectJDBC.getODBConnectione();
String sql = "delete from T_MC where NID ="+nid;
PreparedStatement pStmt = conn.prepareStatement(sql);
isSuccess=pStmt.execute();
pStmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
isSuccess = false;
}
return isSuccess; //返回是否删除成功
}
@Override
public void deleteMcSimg(int nid) {//删除商品图片信息
ConnectJDBC connectJDBC = new ConnectJDBC();
try {
Connection conn = connectJDBC.getODBConnectione();
String sql = "UPDATE T_MC SET SMIG=? WHERE NID=?";
PreparedStatement pStmt = conn.prepareStatement(sql);
pStmt.setString(1, "");
pStmt.setInt(2, nid);
pStmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第五步:定义业务层操作接口(Service)和实现类
1.以商品查询接口为例(QueryGoodsServlet.java)
2.在写完servlet后需要在web.xml中配置servlet的路径
第六步:编写前端页面(html+js),在js中使用ajax请求数据
1.html文件
2.js文件以及ajax请求
ajax的url参数就是在web.xml文件的
3.最后的请求参数和页面效果如下图
返回参数:
页面效果: