【前言】
先简单的介绍一下我所实现的程序,用户通过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一定要标注
另外向各位大佬请教,在控制台中文乱码怎么办
我在另一个程序从数据库获取数据,中文是能在控制台展示的,然而这部分不成功,各位大佬有解决办法,欢迎在评论区指出