java+jsp+mysql实现简单的信息添加,查询

【前言】

  先简单的介绍一下我所实现的程序,用户通过JSP页面输入要添加的产品信息,添加完成后,通过JSP页面自动输出所有产品信息、

  涉及的JSP页面有两个:addGoods.jsp :添加产品信息,showGoods.jsp 展示产品信息

  涉及的JAVA程序有两个:Goods.java : 产品类,GoodServlet.java 实现JSP和MYSQL的连接

  接下来,我将详细介绍每个代码部分实现的细节以及我遇到的问题

addGoods.jsp代码

<%--
  Created by IntelliJ IDEA.
  User: 平常心
  Date: 2023/10/6
  Time: 0:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/goodsServlet" method="post">
    <table border = "1">
        <tr>
            <td>商品名称:</td>
            <td><input type = "text" name = "gname"></td>
        </tr>
        <tr>
            <td>商品价格:</td>
            <td><input type = "text" name = "gprice"></td>
        </tr>
        <tr>
            <td><input type = "submit" value="添加"></td>
            <td><input type = "reset" value="重置"></td>
        </tr>
    </table>
</form>
</body>
</html>

showAllGoods.jsp代码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--
  Created by IntelliJ IDEA.
  User: 平常心
  Date: 2023/10/6
  Time: 0:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border = "1">
    <tr>
        <td>商品编号</td>
        <td>商品名称</td>
        <td>商品价格</td>
    </tr>
    <c:forEach items = "${allGoods}" var = "goods">
        <tr>
            <td>${goods.id}</td>
            <td>${goods.gname}</td>
            <td>${goods.gprice}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

这部分的代码所用到的 c:forEach 需要在开头使用taglib标记定义前缀与uri 引用 ,如果没有定义

代码不会报错,依旧能运行,但是JSP页面会出现如下结果

定义后还要导入两个jar包,课本上说javaee5以上不用导入,我也不知道我使用的是啥,反正导入了准没错,jar包在Tomcat\webapps\examples\WEB-INF\lib 目录下,加上后效果如下

 

Goods.java代码

package entity;

/**
 * @autor 磨相霆
 * @@version 1.0
 */
public class Goods {
    private int id;
    private String gname;
    private double gprice;

    public int getId() {
        return id;
    }

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

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public double getGprice() {
        return gprice;
    }

    public void setGprice(double gprice) {
        this.gprice = gprice;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "id=" + id +
                ", gname='" + gname + '\'' +
                ", gprice=" + gprice +
                '}';
    }
}

addGoods.jsp代码

package servlet;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import entity.Goods;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @autor 磨相霆
 * @@version 1.0
 */
@WebServlet(urlPatterns = "/goodsServlet")
public class GoodsServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Goods> allGoods = new ArrayList<>();
        try {
            //1.导入jar包
            //2.定制配置文件druid.properties
            //3.加载配置文件
            Properties prop = new Properties();
            prop.load(new FileInputStream("E:/javaWebServlet/src/druid.properties"));
            // 4、获取连接池对象
            DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
            //5.获取数据库连接
            Connection connection = dataSource.getConnection();
            //添加
            //定义sql语句
            String sql1 = "insert into goods(id,gname,gprice) value (null,?,?);";
            //7* 获取pstmt对象
            PreparedStatement pstmt1 = connection.prepareStatement(sql1);
            //8.设置参数
            req.setCharacterEncoding("utf-8");
            pstmt1.setString(1,req.getParameter("gname"));
            pstmt1.setDouble(2, Double.parseDouble((req.getParameter("gprice"))));
            //9.执行sql
            int count = pstmt1.executeUpdate();

            //查询
            //6* 定义sql语句
            String sql2 = "select* from goods";
            //7* 获取pstmt对象
            PreparedStatement pstmt2 = connection.prepareStatement(sql2);
            //8.设置参数
            //9.执行sql
            ResultSet rs = pstmt2.executeQuery();
            //10.处理结果
            Goods good = null;
            while(rs.next()){
                // 获取数据
                int id = rs.getInt("id");
                String phoneName = rs.getString("gname");
                double phonePrice = rs.getDouble("gprice");
                // 封装对象
                good = new Goods();
                good.setId(id);
                good.setGname(phoneName);
                good.setGprice(phonePrice);
                // 集载集合
                allGoods.add(good);
            }
            //输出结果
            System.out.println(allGoods);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //存到request对象,以便在页面showAllGoods.jsp中展示
        req.setAttribute("allGoods",allGoods);
        //跳转到showAllGoods.jsp
        RequestDispatcher dis = req.getRequestDispatcher("/Part11/showAllGoods.jsp");
        dis.forward(req, resp);
    }
        /*Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        //将查询结果装到集合中
        ArrayList<Goods> allGoods = null;
        //加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            //建立连接
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db02?characterEncoding=utf-8&useSSL=false", "root", "123456");
            st = con.createStatement();
            //发送添加SQL语句,实现添加功能
            req.setCharacterEncoding("utf-8");
            st.executeUpdate("insert into goods values (null,'" + req.getParameter("gname") + "'," +
                    req.getParameter("gprice") + ")");
            //发送查询SQL语句,返回结果集合
            rs = st.executeQuery("select* from goods");
            //将查询结果装到集合中
            allGoods = new ArrayList<Goods>();
            while (rs.next()) {
                Goods g = new Goods();
                g.setId(rs.getInt("id"));
                g.setGname(rs.getString("gname"));
                g.setGprice(rs.getDouble("gprice"));
                allGoods.add(g);
            }
            rs.close();
            st.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(allGoods);
        //存到request对象,以便在页面showAllGoods.jsp中展示
        req.setAttribute("allGoods", allGoods);
        //跳转到showAllGoods.jsp
        RequestDispatcher dis = req.getRequestDispatcher("/Part11/showAllGoods.jsp");
        dis.forward(req, resp);*/


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

这部分的代码我花费时间比较长的部分, 一开始是

DruidDataSourceFactory 标红,导入druid.jar包后,(我忘记标不标红了),一定要设置成模块有效,不然运行起来一样不成功,将鼠标放在jar包上,右键add to lab(添加到实验室)然后选择module,建议导入的所有jar包都设置成模块有效,设置成模块有效后,你再右键,是找不到add to lab 选项的,另外,你的jar包也能展开了,之前是不能展开的(展开就是文件下还有别的文件)这两个现象其中一个就能证明你的jar是模块有效了

刚刚弄完这个,结果在控制台上出现了中文乱码的问题,图如下

我上网查阅了很多信息,比如去tomcat下的serv.xml添加utf-8,或者在代码上将req得到的字符串转成byte再转成utf-8。然而现在依旧没用解决,注意!这是在控制台上展示的

后来我干脆就不弄了,因为当时我是有中文乱码和for:Each没标注两个问题同时存在的,当时呢我又想着先解决中文乱码,结果中文乱码搞了半天,没弄好,我就先去解决了for:Each的问题,后面中文乱码解决不了,就不搞了,结果就成功了

最后结尾附上我的所有使用的Jar包放置的位置

总结

1.导入的jar提前设置成模块有效

2.for:Each一定要标注

另外向各位大佬请教,在控制台中文乱码怎么办

我在另一个程序从数据库获取数据,中文是能在控制台展示的,然而这部分不成功,各位大佬有解决办法,欢迎在评论区指出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值