java servlet ajax_JavaWeb小白_servlet + ajax

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

以查询商品列表为例:

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

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

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

T_MC建表信息:

23a8b6807c4dd7d79bd4c8dd1d584052.png

T_MC表中数据信息:

afd09e385b385a9752adaa4c459927c9.png

T_MC_TYPE建表信息:

9bbff091c33df7dfd6c1cf293796c2c2.png

T_MC_TYPE表中数据信息:

a93d78a5f539e413f370d9d1fd4e96d1.png

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

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

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

4026f925f83161db2b5e30b5b145b3f8.png

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

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

25a7436b9f248ad25f0ec849f4550bc2.png

a437662617dde12c48bda9eb2b3b744e.png

a3e433e18dd21ca72fa6b767b09d315d.png

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

fdd1bfbb728f14b1a540b4c304f299e5.png

398f722a2a7624c22fe4389dd5fa4920.png

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

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

1.建立MC.java

bb38256f5f29b55dfdd54d34c0834fdf.png

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

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

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

d71935880d4b4bf750507ac629e5306d.png

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)

e28f9e1c89b2f84192828eb6617a5a1d.png

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

QueryGoodsServlet          //servlet的类名

com.QueryGoodsServlet        //servlet真实的路径

QueryGoodsServlet          //servlet的类名

/QueryGoodsServlet            //servlet请求的路径

ac172a68b04959d1e0a4a5c1578a01fe.png

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

1.html文件

7a116be63070b9e1279d1dfa0004f4af.png

2.js文件以及ajax请求

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

395af0de98aa07ec690946fe7d218336.png

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

返回参数:

8efa549d0a844cea600cb2d5999bab50.png

页面效果:

00e6f3fa0d801fd4480e21945d5620de.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值