一开始对java web 不是很熟悉,重新温习了java web ,对El expression ,jstl的使用有了更加深的印象,mvc模式下的分层结构有了进一步的了解.

MVC中的M就是model:模型层,用于表达一个对象,javabean,也可以叫值对象(value Object)用于缓存对象所包含的信息,比如一个商品javabean,一开始没有广泛使用的时候用于解决大量参数传递的麻烦,例如要传递商品信息,就要写方法 public void setGoods(String name,String id,String picture){……省略}

如果开发中要想添加商品的属性pirce 是不是要在方法参数中添加,这样的话对后期维护会很麻烦,造成代码臃肿,所以引入了值对象(value object)也就是javabean。将商品封装成一个类,想传递商品信息的时候就直接传递Goods类型的对象。

MVC中的V就是View表示层:Java web中用jsp表示。在jsp中我配置好bootstrap中的代码就可以显示漂亮的界面了。

MVC中的C就是(controller)控制层:Javaweb中使用servlet,用于写业务逻辑和调用Dao层

下面讲解下我整个网站的开发思路

首先先编写数据层database类 连接数据库 然后根据功能编写dao类,暂时实现GoodsDao类,里面有通过商品id获取单一商品的详细信息的方法

//获取单一商品信息

public GoodsBean getSingleGoods(int goodsBuyId)throws SQLException

{

GoodsBean singleGoods=null;

String sql="select*from tb_goods where id=?";

//保存参数

Object[]params={goodsBuyId};

//查询商品

dataBase.doPstm(sql,params);

//获取结果集

ResultSet resultSet=dataBase.getRs();

List singlegoodsList=new ArrayList();

while (resultSet.next())

{

singleGoods=new GoodsBean();

singleGoods.setId(resultSet.getInt(1));

singleGoods.setGoodsName(resultSet.getString(2));

singleGoods.setGoodsPrice(resultSet.getFloat(3));

singleGoods.setGoodsViewpic(resultSet.getString(4));

singleGoods.setGoodsStoreNum(resultSet.getInt(5));

singleGoods.setGoodsStocktime(StringHandler.timeTostr(resultSet.getTimestamp(6)));

singleGoods.setGoodsInfo(resultSet.getString(7));

singleGoods.setGoodsMaker(resultSet.getString(8));

singleGoods.setGoodsBrand(resultSet.getString(9));

singlegoodsList.add(singleGoods);

}

resultSet.close();

if (singlegoodsList!=null)

{

singleGoods=singlegoodsList.get(0);

}

return singleGoods;

}

获取数据库所有的商品信息的方法,里面包含了数据分页处理的代码,分层的不是很好

先获取商品的记录数,通过商品的记录数除以每页你想设置多少个商品数(limit)去最大整数获得总页数

从前台request.getParameter("pages")获取当前的页码,通过页码显示当前页数所要展示的商品

需要注意的是获取分页记录数的算法:select*from tb_goods order by id limit 起始记录数,记录数数量

order by id:按照id 大小顺序来排序返回结果

limit (当前页数-1*limit) ,(limit)

例如 limit 5,10  返回6-15记录数

public List listGoods(HttpServletRequest request,HttpServletResponse response,int limit)

{

PageBean pageBean=new PageBean();

List singlegoodsList=new ArrayList();

String sql="select count(*) from tb_goods";

pageBean.setLimit(limit);

//计算记录总数的第二种办法:使用mysql的聚集函数count(*)

ResultSet resultSet;

try

{

resultSet = dataBase.getPreparedStatement(sql).executeQuery(sql);

if(resultSet.next())

{

pageBean.setCount(resultSet.getInt(1));//结果为count(*)表,只有一列。这里通过列的下标索引(1)来获取值

}

}

catch (SQLException e1)

{

// TODO Auto-generated catch block

e1.printStackTrace();

}

//由记录总数除以每页记录数得出总页数

pageBean.setTotalpages((int)Math.ceil(pageBean.getCount()/(pageBean.getLimit()*1.0)));

//获取跳页时传进来的当前页面参数

String strPage = request.getParameter("pages");

//判断当前页面参数的合法性并处理非法页号(为空则显示第一页,小于0则显示第一页,大于总页数则显示最后一页)

if (strPage == null)

{

pageBean.setPages(1);

}

else

{

try

{

pageBean.setPages(java.lang.Integer.parseInt(strPage));

}

catch(Exception e)

{

pageBean.setPages(1);

}

if (pageBean.getPages()< 1)

{

pageBean.setPages(1);

}

if (pageBean.getPages() >pageBean.getTotalpages())

{

pageBean.setPages(pageBean.getTotalpages());

}

}

//由(pages-1)*limit算出当前页面第一条记录,由limit查询limit条记录。则得出当前页面的记录

try

{

resultSet = dataBase.getPreparedStatement("select*from tb_goods order by id limit "+(pageBean.getPages()-1)*limit+","+limit).executeQuery();

while (resultSet.next())

{//遍历显示

GoodsBean singleGoods=new GoodsBean();

singleGoods.setId(resultSet.getInt("id"));

singleGoods.setGoodsName(resultSet.getString("goods_name"));

singleGoods.setGoodsPrice(resultSet.getFloat("goods_price"));

singleGoods.setGoodsViewpic(resultSet.getString("goods_viewpic"));

singlegoodsList.add(singleGoods);

}

request.setAttribute("pageBean", pageBean);

}

catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return singlegoodsList;

}

下面是分页的javabean:PageBean

package com.hhb.javabean;

public class PageBean

{

private int pages; //待显示页面

private int count; //总条数

private int totalpages; //总页数

private int limit; //每页显示记录条数

public int getLimit() {

return limit;

}

public void setLimit(int limit) {

this.limit = limit;

}

public int getTotalpages() {

return totalpages;

}

public void setTotalpages(int totalpages) {

this.totalpages = totalpages;

}

public int getCount() {

return count;

}

public void setCount(int count) {

this.count = count;

}

public int getPages() {

return pages;

}

public void setPages(int pages) {

this.pages = pages;

}

}

下面介绍Servlet 控制层

GoodsServlet:

dopost方法主要控制业务逻辑,通过request.getServletPath()获取前台当前页面的路径,在web.xml中已经设置好GoodsServlet的两个路径

This is the description of my J2EE component

This is the display name of my J2EE component

GoodsServlet

com.hhb.servlet.GoodsServlet

GoodsServlet

/listgoods

GoodsServlet

/viewgoods

通过获取当前的路径调用所对应的方法

@Override

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException

{

String servletPath=request.getServletPath();

System.out.println("servletPath:"+servletPath);

//String methodName=request.getParameter("methodName");

//if(methodName!=null&&methodName.equals("listgoods"))

//{

//listGoods(request, response);

//}

if("/listgoods".equals(servletPath))

{

listGoods(request, response);

//listDividegoods(request, response);

}

else if("/viewgoods".equals(servletPath))

{

viewGoods(request, response);

}

}

所调用的方法在Servlet中实现

//获取所有的商品

protected void listGoods(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException

{

try

{

GoodsDao goodsDao=new GoodsDao();

List allgoodsList=goodsDao.listGoods(request, response,12);

request.setAttribute("allgoodsList",allgoodsList);

goodsDao.closed();

}

catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

request.getRequestDispatcher("/listGoods.jsp").forward(request, response);

}

//查询商品详细信息

protected void viewGoods(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

{

Integer goodId=StringHandler.strToint(request.getParameter("goodId"));

try

{

GoodsDao goodsDao=new GoodsDao();

GoodsBean singleGoods=goodsDao.getSingleGoods(goodId);

request.setAttribute("singleGoods", singleGoods);

goodsDao.closed();

}

catch (Exception e)

{

// TODO: handle exception

e.printStackTrace();

}

request.getRequestDispatcher("/viewGoods.jsp").forward(request,response);

}

需要注意的是StringHandler,是一个字符串帮助类,主要实现字符串与各类型之间的转换

//删除空格

public static String delBlank(String str)

{

if (str!=null)

{

return str.replace(" ","");

}

return null;

}

//字符串转换成整型

public static Integer strToint(String str)

{

if (str!=null&&!str.equals(""))

{

try

{

return Integer.parseInt(str);

} catch (Exception e)

{

// TODO: handle exception

e.printStackTrace();

return null;

}

}

return null;

}

//将字符串转换成时间格式

public static String timeTostr(Date date)

{

String strDate="";

if (date!=null)

{

SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

strDate=format.format(date);

}

return strDate;

}

//时间转换成字符串

public static String getSerial(Date date)

{

SimpleDateFormat fm=new SimpleDateFormat("MMddyyyyHH");

String serials=fm.format(date);

return serials;

}

//将字符串转换成数组

public static int[] changeToIntArray(String[]strs)

{

int[] nums=null;

if (strs!=null)

{

nums=new int[strs.length];

for (int i = 0; i < strs.length; i++)

{

nums[i]=Integer.parseInt(strs[i]);

}

}

return nums;

}

//将Cookie

public static String cookieEncode(String str)

{

String change="";

if(str!=null)

{

try

{

change=URLEncoder.encode(str,"UTF-8");

}

catch (UnsupportedEncodingException e)

{

e.printStackTrace();

}

}

return change;

}

public static String cookieDecCode(String str)

{

String change="";

if(str!=null)

{

try

{

change=URLDecoder.decode(str,"UTF-8");

}

catch (UnsupportedEncodingException e)

{

e.printStackTrace();

}

}

return change;

}

//将字符串转换成List

public static List StringToList(String str)

{

String[] arraystrs=null;

List listStrs=null;

if (str!=null&&!str.equals(""))

{

listStrs=new ArrayList();

arraystrs=str.split("\r\n");

for (int i = 0; i < arraystrs.length; i++)

{

if(arraystrs[i]!=null&&!arraystrs[i].equals(""))

{

listStrs.add(arraystrs[i]);

}

}

}

return listStrs;

}

//数组转换成字符串

public static String ArrayToString(String[] array)

{

String string="";

if (array!=null&&array.length!=0)

{

for (int i = 0; i < array.length; i++)

{

string+=array[i]+",";

}

}

//去掉最后一个,

string=string.substring(0,string.lastIndexOf(","));

return string;

}

需要注意的是:在listGoods.jsp中当前路径也要改成

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

String servletPath="listgoods";

String currentPath=basePath+servletPath;

指定/listgoods路径显示的jsp是listGoods.jsp页面

bootstrap java web_Java web MVC(jsp,servlet,dao)+Bootstrap购物网站开发经验总结 (持续更新)...相关推荐

  1. 基于JSP+Servlet+MySQL+Bootstrap的防疫知识在线问答系统

    问答首页 详细问答 列表页面 回复页面 发起提问 我的问答 密码修改 修改个人资料 用户登录 用户注册 管理页面 用户管理 帖子管理 主题管理 技术描述 开发工具: Idea/Eclipse 数据库: ...

  2. JavaWeb基于Jsp+Servlet的动物领养网站(原创毕业设计项目)

     项目类型:JAVA WEB项目 项目名称:JavaWeb基于Jsp+Servlet的动物领养网站 用户类型:双角色(管理员+爱心人士) 设计模式:Jsp+Servlet 开发工具:Eclipse  ...

  3. Java Web——基于Jsp+Servlet的大学生社团管理系统

    JavaWeb课程设计+JavaWeb实训作业:(Jsp+Servlet+Mysql+Tomcat+Idea) 项目类型:JAVA WEB项目 用户类型:3个角色(管理员+社长+学生) 主要技术:Js ...

  4. 北风网java微信_北风网--Java中级班之JSP+servlet+论坛项目+论坛项目MVC实现

    本次培训的重点在与项目实战培训,项目实战培训中讲采用MVC设计模式进行开发,考虑点主要是为了高级部分的框架学习打下很好的基础,通过本次培训,学员能够很好的掌握MVC下Web项目设计的方法,在JSP+s ...

  5. java链接mysql mvc_MVC jsp+servlet+javabean 连接Mysql数据库測试demo

    首先我们应该了解什么是MVC: MVC包含三个部分 : ①View:由各种JSP页面组成. ②Controller:由各种Servlet组成,Controller就是将View和Model来进行匹配, ...

  6. 基于JavaWeb Mybatis+MVC(JSP + servlet + javabean)的高校就业管理系统(含项目源码)

    基于JavaWeb Mybatis+MVC的高校就业管理系统 项目简介 基本功能简介 项目要求 概要设计 数据模型(E-R图) 数据库结构设计 主要页面展示 项目实现 创建项目 项目结构展示 项目关键 ...

  7. cad java web_Java Web的演变:大魏Java记3

    一.从Java到Tomcat 我们知道,Java分为JavaME(这个主要是做一些嵌入式的程序,我们不关注),JavaSE,JavaEE三大类.JavaSE和JavaEE的区别如下图所示,我们可以得出 ...

  8. filter java web_java web filter 之一 基础实现

    本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 Filter 是java下的一种过滤器 ,能实现对java web程序 客户端和服务器端消息的过滤,也就是在服务器段接受r ...

  9. java架构-Spring MVC 与 Servlet

    相信大家都能够在上网上看到Spring MVC的核心类其实就是DispatherServlet,也就是Spring MVC处理请求的核心分发器.其实核心分发器几乎是所有MVC框架设计中的核心概念,像在 ...

最新文章

  1. 为什么说 Python 内置函数并不是万能的?
  2. Python混淆矩阵可视化:plt.colorbar函数自定义颜色条的数值标签、配置不同情况下颜色条的数值范围以及数据类型(整型、浮点型)
  3. 纳税服务系统十一【抽取BaseService、条件查询】
  4. 把文本以图片的形式保存
  5. 我是如何学习写一个操作系统(二):操作系统的启动之Bootloader
  6. 属于你们的“礼仪小课堂”
  7. 《Python编程从入门到实践》记录之求模运算符
  8. 宏基因组应用_宏基因组学技术在生物冶金中的应用
  9. SQL Server 审计操作概念
  10. Spring 下 MyBatis 的基本使用
  11. 浅谈volatile的原理
  12. 在Windows服务器上启用远程桌面连接
  13. python结构体_python中定义结构体
  14. LLVM 学习(二) -LLVM IR 语法理论学习
  15. UE4 虚幻引擎,处理PBR材质
  16. 任意阶幻方的解法及c++实现
  17. 小程序用户行为数据监测与分析以及案例分享
  18. 机器学习的几种分类损失函数
  19. 安装VMTools工具
  20. 第8天:鼠标控制与32位模式切换

热门文章

  1. excel删除行 uipath_UiPath之常见问题集锦(二)
  2. 【IDEA】IDEA 下一些 编码技巧
  3. 【redis】三种redis数据导出导入方式
  4. 【elasticsearch】elasticsearch 生命周期 resourceAlreadyExistsException
  5. 【Elasticsearch】es查看有问题的索引或者分片
  6. SparkSQL源代码:GlobalTempView与LocalTempView
  7. 【Flink】Flink 启动报错 DirectoryNotEmptyException Could not close resource
  8. Sping : @InitBinder注解
  9. 谷歌浏览器:拷贝为CURL的小技巧
  10. html5 页面答题算分,JavaScript实现答题评分功能页面