JavaWeb小白_servlet + ajax

最近在学习java,按照书上的例子尝试做一个前后台的web项目练习小程序。在这里记录一下我目前理解的javaweb项目制作的步骤和注意事项。如果有不妥的地方欢迎大家指正。

以查询商品列表为例:

 

第一步:分析具体问题,明确需求,建立数据库和数据表

根据具体的实际情况进行分析并确定对象和字段,根据对象建表。

我使用的是oracle,在Oracle数据库中建立T_MC表用来展示商品的详细信息,建立T_MC_TYPE表示商品的类型信息。

T_MC建表信息:

JavaWeb小白_servlet + ajax_第1张图片

 T_MC表中数据信息:

T_MC_TYPE建表信息:

JavaWeb小白_servlet + ajax_第2张图片

T_MC_TYPE表中数据信息:

JavaWeb小白_servlet + ajax_第3张图片

 注意:建表时表名称和字段名称尽量使用大写英文。我当时使用的是小写,最后查表的时候还要给表名和字段名加上引号,导致sql语句看起来很混乱。

 

 

 

 

第二步:建立javaweb程序,明确项目文件的组织结构

1.建立 Dynamic Web project,命名为OnlineShop

JavaWeb小白_servlet + ajax_第4张图片

 

 

2.在项目的二级目录添加src文件夹用来放.java文件,检查是否存在web.xml文件,

如果没有就右键项目名称--ava EE Tools--Generate Deployment descriptor stub

JavaWeb小白_servlet + ajax_第5张图片

JavaWeb小白_servlet + ajax_第6张图片

JavaWeb小白_servlet + ajax_第7张图片

 

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包了。

JavaWeb小白_servlet + ajax_第8张图片

 

JavaWeb小白_servlet + ajax_第9张图片

 

 

 

 

第三步:定义数据传输/表现层对象(DTO/VO)

根据数据库中的数据表建立相关的类

1.建立MC.java

JavaWeb小白_servlet + ajax_第10张图片

 

 

 

 

 

第四步:定义数据层操作接口(DAO接口)和实现类

DAO是数据访问对象,这里的数据层操作接口主要用于为上层的服务层接口提供对应的操作方法,使得上层逻辑可较快捷方便地访问底层数据库表。

1.MC的DAO接口McDAO.java(练习中只使用了前两个方法)

JavaWeb小白_servlet + ajax_第11张图片

 

 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 mcList = selectMc(nmaxId, nminId, keywords, 0);
  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 selectMc(String nmaxId, String nminId, String keyword,int pageNum) {//返回指定的商品信息列表,并指定页码用于前台显示
  ConnectJDBC connectJDBC = new ConnectJDBC();
  List mclisList=new ArrayList();
  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)

JavaWeb小白_servlet + ajax_第12张图片

 

 

2.在写完servlet后需要在web.xml中配置servlet的路径


QueryGoodsServlet          //servlet的类名
com.QueryGoodsServlet        //servlet真实的路径


QueryGoodsServlet          //servlet的类名
/QueryGoodsServlet            //servlet请求的路径

JavaWeb小白_servlet + ajax_第13张图片

 

 

 

 

 

第六步:编写前端页面(html+js),在js中使用ajax请求数据

 1.html文件

JavaWeb小白_servlet + ajax_第14张图片

 

 

2.js文件以及ajax请求

ajax的url参数就是在web.xml文件的中配置的路径

JavaWeb小白_servlet + ajax_第15张图片

 

 

3.最后的请求参数和页面效果如下图

返回参数:

JavaWeb小白_servlet + ajax_第16张图片

页面效果:

JavaWeb小白_servlet + ajax_第17张图片

 

转载于:https://www.cnblogs.com/-Chang/p/9492352.html

你可能感兴趣的:(JavaWeb小白_servlet + ajax)