Day16_学点儿JavaEE_实践_基于IDEA2023的简易JavaWeb项目、Tomcat输出乱码解决

0 JavaWeb项目目录

└──JavaWeb├──resources│  └──db.properties├──src│  └──com.sdust.web│     ├──servlet│     │  └──StudentServlet│     ├──pojo│     │  └──Student│     └──util│        └──JDBCUtil├──web│  ├──static│  │  └──bootstrap-3.4.1-dist│  ├──WEB-INF│  │  ├──lib│  │  │  └──mysql-connector-j-8.0.31.jar│  │  └──web.xml│  ├──index.jsp│  └──student_list.jsp└──JavaWeb.iml

bootstrap下载(美化包)
mysql-connector-j-8.0.31.jar

1 IDEA、Tomcat环境搭建

1.1 版本

IDEA:IntelliJ IDEA 2023.2.4
Tomcat:apache-tomcat-9.0.87官方下载地址
用IDEA进行JavaWeb的话,不需要配置Tomcat的环境变量,下载后解压就可以用了。

1.2 IDEA2023如何将项目变成Web项目

1.2.1 Help中点击Find Action

在这里插入图片描述

1.2.2 搜索Add Framework Support

在这里插入图片描述

1.2.3 勾选Web Application

在这里插入图片描述
在这里插入图片描述

1.3 配置Tomcat Server

1.3.1 点击Edit Configurations

在这里插入图片描述

1.3.2 点击加号,选择Tomcat Server Local

在这里插入图片描述
在这里插入图片描述

1.4 添加依赖

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

浏览器既可以访问JSP也可以访问Servlet,但是绝大部分情况下浏览器不直接访问JSP,JSP主要用来展示数据,
所以绝大部分情况是先访问Servlet查找出数据来之后转发到JSP页面进行展示。

2 Student类与数据库表

2.1 Student类

/** 适度编码益脑,沉迷编码伤身,合理安排时间,享受快乐生活。* Copyright @TangXJ* Created by TangXJ* Created&Used date: 2024/4/2 上午11:31 ~ 2024/4/2 下午1:44* Modified date: 2024/4/2 下午1:44*/package com.sdust.web.pojo;public class Student {private Integer id;private String name;private Integer age;private String gender;public Student() {}public Student(Integer id, String name, Integer age, String gender) {this.id = id;this.name = name;this.age = age;this.gender = gender;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}

2.2 数据库student表

在这里插入图片描述

2.3 JDBCUtil

/** 适度编码益脑,沉迷编码伤身,合理安排时间,享受快乐生活。* Copyright @TangXJ* Created by TangXJ* Created&Used date: 2024/3/27 下午4:00 ~ 2024/4/2 下午1:40* Modified date: 2024/4/2 下午1:40*/package com.sdust.web.util;import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class JDBCUtil {private static String driver;private static String url;private static String username;private static String password;private JDBCUtil(){}//静态代码块,在类加载的时候只会执行一次,避免重复加载驱动   还没调方法就执行了//读取配置文件static {try {//1.通过当前的类获取类加载器ClassLoader classLoader = JDBCUtil.class.getClassLoader();//反射 JVM会说  先当成固定的结论就行了//2.通过类加载器的方法获得一个输入流InputStream inputStream = classLoader.getResourceAsStream("db.properties");//不是因为叫了resource,是因为标识了Mark as//3.创建一个Properties对象   对配置文件的封装Properties properties = new Properties();properties.load(inputStream);//配置文件//4.获取配置文件中的参数的值driver = properties.getProperty("driver");url = properties.getProperty("url");username = properties.getProperty("username");password = properties.getProperty("password");} catch (IOException e) {throw new RuntimeException(e);}try {Class.forName(driver);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}public static Connection getConnection() throws SQLException {Connection connection = DriverManager.getConnection(url, username, password);return connection;/*Connection connection = null;try {connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8", "root", "xiangjie");} catch (SQLException e) {throw new RuntimeException(e);}return connection;*/}public static void close(Connection connection, Statement statement, ResultSet resultSet) {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (statement != null) {try {statement.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (connection != null) {try {connection.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}

2.4 resources/db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/xxxx?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8
username=root
password=xxxxx

在这里插入图片描述
在这里插入图片描述

3 StudentServlet

@WebServlet("/student")
public class StudentServlet extends HttpServlet {//默认访问service@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("StudentServlet.service");Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;List<Student> list = new ArrayList<>();try {connection = JDBCUtil.getConnection();String sql = "SELECT id,name,age,gender FROM student";//预编译preparedStatement = connection.prepareStatement(sql);resultSet = preparedStatement.executeQuery();while (resultSet.next()) {//判断下一个有没有,如果返回true而且指向下一个,没有返回falseint id = resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");String gender = resultSet.getString("gender");Student student = new Student(id, name, age, gender);list.add(student);}for (Student student : list) {System.out.println(student);}} catch (SQLException throwables) {throwables.printStackTrace();} finally {JDBCUtil.close(connection, preparedStatement, resultSet);}//把list数据放到req里面req.setAttribute("list", list);//转发到student_list.jsp页面进行展示req.getRequestDispatcher("student_list.jsp").forward(req, resp);}
}

4 student_list.jsp

<%@ page import="com.situ.web.pojo.Student" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><link rel="stylesheet" href="static/bootstrap-3.4.1-dist/css/bootstrap.css">
</head>
<body><%//JSP页面中可以嵌套Java代码//JSP脚本:在这里可以写任意的Java代码//request、response:JSP页面的内置对象List<Student> list = (List<Student>) request.getAttribute("list");%><table class="table table-striped table-bordered table-hover table-condensed"><tr><td>ID</td><td>名字</td><td>年龄</td><td>性别</td><td>编辑</td><td>删除</td></tr><%for (Student student : list) {%><tr><td><%=student.getId()%></td><td><%=student.getName()%></td><td><%=student.getAge()%></td><td><%=student.getGender()%></td><td>编辑</td><td>删除</td></tr><%}%></table>
</body>
</html>

5 结果

在这里插入图片描述

6 tomcat中文乱码问题

6.1 方法一

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加一行代码-Dfile.encoding=UTF-8
在这里插入图片描述
在这里插入图片描述
添加同样的一行代码-Dfile.encoding=UTF-8

6.2 方法二

如果上面方法不管用,请先删掉加了的代码,再尝试方法二
按照路径找到logging.properties文件
在这里插入图片描述
有notepad++就用notepad++打开,没有记事本打开就行
在这里插入图片描述
把所有的UTF-8编码改成GBK可以把原来的注释掉,方便出现其他情况时改回
在这里插入图片描述

7 代码

Day16_JSP、Servlet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用icpc tool进行滚榜操作

前言 参加ACM的同学都知道&#xff0c;比赛非常有趣的环节就是赛后的滚榜环节&#xff0c;所以为了一个比赛的完整性&#xff0c;自己办比赛时也想要加入滚榜的操作&#xff0c;经过一段时间的研究学习&#xff0c;已经可以将滚榜程序与domjudege程序成功完成融合&#xff0c;…

2024.4.15

代码&#xff1a;uart4.c #include "uart4.h"void uart4_config() {//使能GPIO\GPIOG\UART4的外设时钟RCC->MP_AHB4ENSETR | (0x1<<1);RCC->MP_AHB4ENSETR | (0x1<<6);RCC->MP_APB1ENSETR | (0x1<<16);//设置PB2和PG11为管脚复用功能//P…

【C/C++】什么是内存泄漏?如何检测内存泄漏?

一、内存泄漏概述 1.1 什么是内存泄漏 内存泄漏是在没有自动 gc 的编程语言里面&#xff0c;经常发生的一个问题。 自动垃圾回收&#xff08;Automatic Garbage Collection&#xff0c;简称 GC&#xff09;是一种内存管理技术&#xff0c;在程序运行时自动检测和回收不再使用…

淘宝商品详情API数据采集接口|如何快速采集淘宝商品数据?

如何快速采集淘宝商品数据 无论是谁&#xff0c;如果单凭人工的方式去收集淘宝、天猫等平台的商品数据信息&#xff0c;工作量是巨大的&#xff0c;如果借助有采集软件的第三方公司操作&#xff0c;则可实现对大数据的轻松掌握&#xff0c;但是外包给第三方公司需要支付一定的…

一文读懂自动化运维工具ansible及其使用

1. ansible简介 ansible是干什么的 ansible是目前最受运维欢迎的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;SaltStack puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令…

韩顺平Java | C25 JDBC和连接池(上)

概述 JDBC概述&#xff1a;JDBC为访问不同数据库提供统一接口&#xff0c;为使用者屏蔽细节问题。Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统&#xff0c;从而完成对数据库的各种操作。 // 模拟代码 //JdbcInterface.java --Java规定的JDBC接口(方法) p…

《自动机理论、语言和计算导论》阅读笔记:p172-p224

《自动机理论、语言和计算导论》学习第 8 天&#xff0c;p172-p224总结&#xff0c;总计 53 页。 一、技术总结 1.Context-Free Grammar(CFG) 2.parse tree (1)定义 p183&#xff0c;But perhaps more importantly, the tree, known as a “parse tree”, when used in a …

智能物联网远传冷水表管理系统

智能物联网远传冷水表管理系统是一种基于物联网技术的先进系统&#xff0c;旨在实现对冷水表的远程监测、数据传输和智能化管理。本文将从系统特点、构成以及带来的效益三个方面展开介绍。 系统特点 1.远程监测&#xff1a;系统可以实现对冷水表数据的远程监测&#xff0c;无…

Vscode搭建STM32 Keil工程:揭秘高效开发的秘密武器,轻松打造专业级嵌入式项目!

Vscode搭建STM32 Keil工程&#xff1a;揭秘高效开发的秘密武器&#xff0c;轻松打造专业级嵌入式项目&#xff01; 前言&#xff1a;Visual Studio Code 是一个支持多种语言的源代码编辑器&#xff0c;具备语法高亮、代码补全、重构等功能&#xff0c;并集成了命令行和Git。适…

Alibaba --- 如何写好 Prompt ?

如何写好 Prompt 提示工程&#xff08;Prompt Engineering&#xff09;是一项通过优化提示词&#xff08;Prompt&#xff09;和生成策略&#xff0c;从而获得更好的模型返回结果的工程技术。总体而言&#xff0c;其实现逻辑如下&#xff1a; &#xff08;注&#xff1a;示例图…

电商(淘宝1688)api接口数据采集:自营商城上货功能实现必备API

在电商领域&#xff0c;如淘宝和1688这样的平台提供了丰富的API接口&#xff0c;以便开发者能够集成和扩展他们的业务功能。对于自营商城的上货功能实现&#xff0c;以下是一些必备的API接口&#xff1a; 1.请求方式&#xff1a;HTTP POST GET &#xff08;复制薇&#xff1a;…

瑞芯微RK3568/RK3588+鸿蒙,矿鸿工控屏、矿鸿工控板、矿鸿网关,推动矿业数智化变革

4月10日至12日&#xff0c;以“绿色智能创新&#xff0c;携手共赢未来”为主题的第二届中国国际矿业装备与技术展览会在西安举行。信迈科技携矿鸿解决方案及产品亮相&#xff0c;赋能矿山行业数智化升级和国产化改造进程全面提速。 作为华为矿山军团矿鸿生态使能合作伙伴&#…