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 getAllItems(){
        Connection conn= null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        ArrayList list=new ArrayList();

        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 getViewlist(String list){
        ArrayList itemslist=new ArrayList();
        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 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());
    }

}

你可能感兴趣的:(Java遇见HTML-servlet(二))