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

本文主要是介绍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

这篇关于Day16_学点儿JavaEE_实践_基于IDEA2023的简易JavaWeb项目、Tomcat输出乱码解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887647

相关文章

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick