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.mzph.cn/news/809902.shtml

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

相关文章

蓝桥杯 总结经典基础题型

十进制转R进制 #include<iostream> #include<string> #include<algorithm> using namespace std;string tentoR(int x, int r) {if (x 0) return "0"; // 如果x为0&#xff0c;直接返回"0"string s;while (x) {int num x % r;if (num…

Nginx健康检查

Nginx健康检查nginx_upstream_check_module nginx健康检查介绍: ​ 主动健康检查&#xff0c;nignx定时主动地去ping后端的服务列表&#xff0c;当发现某服务出现异常时&#xff0c;把该服务从健康列表中移除&#xff0c;当发现某服务恢复时&#xff0c;又能够将该服务加回健…

Day106:代码审计-PHP原生开发篇文件安全上传监控功能定位关键搜索1day挖掘

目录 emlog-文件上传&文件删除 emlog-模板文件上传 emlog-插件文件上传 emlog-任意文件删除 通达OA-文件上传&文件包含 知识点&#xff1a; PHP审计-原生开发-文件上传&文件删除-Emlog PHP审计-原生开发-文件上传&文件包含-通达OA emlog-文件上传&文件…

【高项】信息化发展

目录 1.1 信息与信息化 1.1.1 信息 1.信息的定义 2.信息的特征与质量 1.1.2 信息系统 1.信息系统及其特性 2.信息系统生命周期 1.1.3 信息化 1.信息化内涵 2.信息化体系&#xff08;口诀&#xff1a;上应下技左人右规&#xff0c;中资网&#xff09; 1.2 现代化基础…

集装箱5G智能制造工厂数字孪生可视化平台,推进企业数字化转型

集装箱5G智能制造工厂数字孪生可视化平台&#xff0c;推进企业数字化转型。在当下数字化转型的热潮中&#xff0c;集装箱5G智能制造工厂数字孪生可视化平台成为了推动企业转型升级的重要工具。这一平台将先进的5G技术与智能制造相结合&#xff0c;通过数字孪生技术实现生产过程…

SpringMVC之静态资源访问

文章目录 SpringMVC之静态资源访问1. 后缀形式没有『静态资源访问』问题2. / 和 /* 会遇到『静态资源访问』问题3. 解决方案一4. 解决方案二 SpringMVC之静态资源访问 1. 后缀形式没有『静态资源访问』问题 如果你将 DispatcherServlet 的 url-pattern 配置成后缀形式&#x…

【JavaScript】浏览器与事件循环

浏览器的进程模型 主要包含&#xff1a;浏览器进程、网络进程、渲染进程&#xff1b; 一个进程就是一块内存空间&#xff1b; 进程&#xff1a;操作系统资源分配的基本单位&#xff0c;每一个进程都拥有独立的内存空间和系统资源&#xff0c;可以独立运行&#xff1b; 线程…

开课通知 | 5月六西格玛绿带培训火热招生

尊敬的各位学员&#xff1a; 天行健管理咨询将于近期开展六西格玛绿带公开课&#xff0c;旨在为广大企业和个人提供专业的六西格玛绿带培训&#xff0c;帮助大家掌握六西格玛绿带的核心知识和技能&#xff0c;提升工作效率和质量。现将相关事宜通知如下&#xff1a; 一、培训时…

工智能图像降噪软件 ON1 NoNoise AI 2024 for Mac激活版

ON1 NoNoise AI 2024 for Mac是一款专为Mac用户设计的先进人工智能图像降噪软件。其核心功能在于能够利用机器学习技术&#xff0c;快速并智能地消除图像中的噪点&#xff0c;无论是亮度噪点还是颜色噪点&#xff0c;都能得到显著的改善。 软件下载&#xff1a;ON1 NoNoise AI …

【AR】使用深度API实现虚实遮挡

遮挡效果 本段描述摘自 https://developers.google.cn/ar/develop/depth 遮挡是深度API的应用之一。 遮挡&#xff08;即准确渲染虚拟物体在现实物体后面&#xff09;对于沉浸式 AR 体验至关重要。 参考下图&#xff0c;假设场景中有一个Andy&#xff0c;用户可能需要放置在包含…

揭秘英特尔AI芯片如何做到比H100训练快40%、推理快50%

英特尔&#xff0c;开始正面硬刚英伟达了。 深夜时分&#xff0c;英特尔CEO帕特基辛格激动展示全新AI芯片Gaudi 3&#xff0c;引领未来科技潮流&#xff0c;开启智能新篇章。 他为什么开心到现场直接蹦迪&#xff1f; 看下Gaudi 3的性能结果&#xff0c;就一目了然了&#xf…

【回溯】Leetcode 78. 子集【中等】

子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[],[1],[2],[1,2…

算法打卡day32

今日任务&#xff1a; 1&#xff09;738.单调递增的数字 2&#xff09;968.监控二叉树 738.单调递增的数字 题目链接&#xff1a;738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;贪…

(Java)数据结构——正则表达式

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 正则表达式概念 正则表达式&#xff0c;又称规则表达式&#xff08;Regular Expression&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xf…

初学网络编程

网络编程是指编写能够在网络环境中运行&#xff0c;进行数据通信的程序的过程。它涵盖了从建立网络连接、发送和接收数据&#xff0c;到关闭连接等一系列操作。网络编程是开发网络应用程序的基础&#xff0c;它使得不同的计算机和设备能够通过网络进行数据交换和通信。 三个核…

微机消谐装置能够有效消除电网中的谐波干扰

随着电力技术的飞速发展&#xff0c;电网系统的稳定性与安全性成为了电力工业关注的重点。在这个背景下&#xff0c;微机消谐装置以其卓越的性能和广泛的应用领域&#xff0c;逐渐成为了电网系统中不可或缺的一部分。 微机消谐装置是一种基于微处理器技术的先进设备&#xff0c…

ELK企业级日志分析系统(elasticsearch+logstash+kibana)

目录 一.ELK概述 1.定义 &#xff08;1&#xff09;ElasticSearch &#xff08;2&#xff09;Kiabana &#xff08;3&#xff09;Logstash &#xff08;4&#xff09;Filebeat 2.filebeat结合logstash带来好处 3.为什么要是用ELK&#xff1f; 4.完整日志系统基本特征 …

无界面 centOS 中使用 DrissionPage

无界面 centOS 中使用 DrissionPage 1. centos 安装 chrome2. python 代码DrissionPage简介 某电影网站使用了加密js&#xff0c;无法直接从主页上爬取电影信息&#xff0c;只好借助 selenium 等工具。selenium 需要在服务器上安装浏览器和对应的 driver。我的服务器是无界面 c…

Docker学习笔记(一):入门篇,Docker概述、基本组成等,对Docker有一个初步的认识

前言 记录时间 [2024-4-5] 在先前的文章中&#xff0c;笔者进行了Windows系统下YOLOv8模型的简单测试&#xff0c;并由此引发思考&#xff1a;是否能尝试将此模型运行在Linux中呢&#xff1f;又或者&#xff0c;运行在Docker中。关于Docker的学习就这么展开了。 本文便是有关D…

RX8130CE为用户提供带复位延迟和主备电管理的解决方案

实时时钟作为设备的精确时钟来源&#xff0c;其作用如同人的心脏&#xff0c;为设备提供准确稳定的心跳.而便携式设备由于应用场景多变&#xff0c;所以对内部元器件要求也相对较高&#xff0c;这就对作为核心器件的实时时钟模块提出不少挑战。世强代理品牌EPSON实时钟模块产品…