Java遇见HTML-servlet(二)

Java遇见HTML的6篇文章技术较老只是在熟悉java基础知识和了解mvc模型思想

model1思想:

image.png

简单的说就是浏览器请求jsp,jsp请求JavaBean,JavaBean调用数据库获取属性值返回给jsp,jsp再响应给浏览器。

model2思想:

引入MVC思想,M是model(JavaBean),V是view(Jsp),C是controller(servlet)


image.png
image.png

1、浏览器请求JSP,提交到servlet中
2、servlet实例化JavaBean对象,并调用JavaBean对象中set和get方法
3、JavaBean从DB数据库中读取值
4、获取值后返回给servlet再跳转到jsp页面响应给浏览器

实现一个小例子:

前端页面做的很丑,不用关注。
需求如下:
1、商品列表页:展示所有商品,可以点击商品查看商品详情,跳转到商品详情页
2、商品详情页:输入购买商品数量,添加到购物车,跳转到购物车页面(在商品详情页同时展示浏览器过的前5条商品信息)
3、购物车页面:查看添加到购物车中的商品信息,购买商品总金额,在购物车页面可以删除添加到购物车中的商品。

梳理需求:
1、需要三个jsp页面,分别是商品列表页、商品详情页、购物车页面
2、需要配置查询数据库信息类DBHelper、商品实体类Items、购物车类Cart实现添加购物车、删除、计算商品总额;ItemsDao类实现从数据库获取所有商品信息、根据商品id查询商品详情、实现展示前5条浏览记录;cartservlet类实现与jsp页面交互的商品增加删除以及页面跳转的功能。

第一步:商品实体类Items:

package com.zhidaoauto.Entity;

import java.util.Objects;

//商品实体类
public class Items {
    private int id;
    private String name;
    private int price;
    private int number;
    private String city;
    private String picture;

    public Items(){

    }

    public Items(int id,String name,int price,int number,String city,String picture){
        this.id=id;
        this.name=name;
        this.price=price;
        this.number=number;
        this.city=city;
        this.picture=picture;
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }

    @Override
    public String toString() {
        return "Items{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", number=" + number +
                ", city='" + city + '\'' +
                ", picture='" + picture + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Items items = (Items) o;
        return id == items.id &&
                price == items.price &&
                number == items.number &&
                Objects.equals(name, items.name) &&
                Objects.equals(city, items.city) &&
                Objects.equals(picture, items.picture);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, price, number, city, picture);
    }
}

该类中重写了equals、hashCode方法,是为了防止重复添加相同商品到购物车时,购物车当成不同商品的问题,这样重复添加相同商品到购物车只会商品数量增加,商品不会增加。

第二步:DBHelper类配置连接数据库,其实可以使用mybatis去连接数据库,本文讲的方法有些老大家可以用mybatis去实现连接数据库和写sql语句查询数据库表。

package com.zhidaoauto.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBHelper {
    private static final String driver="com.mysql.cj.jdbc.Driver";
    private static final String url="jdbc:mysql://localhost:3306/dbgirl?useUnicode=true&characterEncoding=UTF-8";
    private static final String username="root";
    private static final String password="baoxian_admin";

    private static Connection conn=null;
    //静态代码块负责加载驱动
//    static {
//        try{
//            Class.forName(driver);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//    }

    //连接数据库
    public static Connection getConn() throws SQLException {
        if (conn==null){
            conn= DriverManager.getConnection(url,username,password);
            return conn;
        }
        return conn;
    }


    public static void main(String[] args) {
        try {
            Connection connection=getConn();
            if (connection!=null){
                System.out.println("连接成功");
            }else {
                System.out.println("连接失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

第三步:ItemsDao类,商品业务类,从数据库中查找到商品信息,存到商品实体类中
主要用到getAllItems、getItemDetail、getViewlist方法

package com.zhidaoauto.dao;

import com.zhidaoauto.Entity.Items;
import com.zhidaoauto.util.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/*
商品业务类,从数据库中查找到商品信息,存到商品实体类中

 */
public class ItemsDao {

    //往数据库表items中插入数据
    public void addItems(){
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;

        try {
            conn=DBHelper.getConn();
            String sql="INSERT into item (id,name,price,number,city,picture) VALUES(6,'鼠标垫',20,3,'北京','5555');";
            ps=conn.prepareStatement(sql);
            boolean flag=ps.execute();
            if (flag){
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败,查看数据库表数据是否添加成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    public ArrayList<Items> getAllItems(){
        Connection conn= null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        ArrayList<Items> list=new ArrayList<Items>();

        try {

            conn=DBHelper.getConn();
            String sql="select * from item";
            ps=conn.prepareStatement(sql);
            rs=ps.executeQuery();
            while (rs.next()){
                Items items=new Items();
                items.setId(rs.getInt("id"));
                items.setName(rs.getString("name"));
                items.setNumber(rs.getInt("number"));
                items.setPrice(rs.getInt("price"));
                items.setCity(rs.getString("city"));
                items.setPicture(rs.getString("picture"));
                list.add(items);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }finally {
            if (rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
        return list;
    }


    public Items getItemDetail(int id){
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;


        try {
            conn=DBHelper.getConn();
            String sql="select * from item where id="+id;
            ps=conn.prepareStatement(sql);
            rs=ps.executeQuery();
            while (rs.next()){
                Items items=new Items();
                items.setId(rs.getInt("id"));
                items.setName(rs.getString("name"));
                items.setNumber(rs.getInt("number"));
                items.setPrice(rs.getInt("price"));
                items.setCity(rs.getString("city"));
                items.setPicture(rs.getString("picture"));
                return items;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }finally {
            if (rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

        return null;
    }

    //获取最近浏览的前5条信息
    public ArrayList<Items> getViewlist(String list){
        ArrayList<Items> itemslist=new ArrayList<Items>();
        if (list!=null && list.length()>0){
            String[] s=list.split(":");
            if (s.length>=5){
                for (int i=s.length-1;i>=s.length-5;i--){
                    int id=Integer.valueOf(s[i]);
                    itemslist.add(getItemDetail(id));
                }
            }else {
                for (int j=s.length-1;j>=0;j--){
                    int id=Integer.valueOf(s[j]);
                    itemslist.add(getItemDetail(id));
                }
            }

            return itemslist;
        }else {
            return null;
        }

    }




    public static void main(String[] args) {
        ItemsDao itemsDao=new ItemsDao();
//        ArrayList<Items> list=itemsDao.getAllItems();
//        for (Items items:list){
//            System.out.println(items.getId()+" "+
//                    items.getNumber()+" "+
//                    items.getName()+" "+
//                    items.getCity()+" "+
//                    items.getPicture()+" "+
//                    items.getPrice());
//        }
//

        Items items=itemsDao.getItemDetail(1);
        System.out.println(items.toString());
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1.abstract class 和interface 有什么区别? 抽象类可以有构造方法 接口不行 抽象类可以有...
    sunnysans阅读 842评论 0 1
  • 一. Java基础部分.................................................
    wy_sure阅读 3,785评论 0 11
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,402评论 0 13
  • 三分钟小姐干什么事情都是三分钟热度。 看到好评无数的英语课程,头脑一热立马就把课程费用给交上了,以为买了课程就装进...
    一口好吃的葛爷阅读 601评论 2 4
  • 大漠黄沙,万里不见人家。从东贯西一条大道,无数商人旅客顶着风沙来往不歇。无尽的风沙覆盖的是一条发财之路,但...
    院后俩树阅读 591评论 8 8