会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132989个问题

#coding=utf-8
"""
新增功能:
     完成我方坦克发射子弹(多上官网查看资料)
"""
import pygame,time,random
screen_width=700     #screen:屏  width:宽度
screen_height=500         #height:高度
bg_color = pygame.Color(0,0,0)  #0,0,0代表黑色
text_color = pygame.Color(255,0,0) #255,0,0代表红色  #ff0000也代表红色
class MainGame():
    window = None  #类对象 窗口对象 初始化值为空
    my_tank = None
    # 存储敌方坦克的列表
    enemyTankList = []
    # 定义敌方坦克的数量
    enemyTankCount = 5   #Count:计数、数
    # 存储我方坦克的列表
    myBulletList = []
    def __init__(self):
        pass
    # 开始游戏
    def startGame(self):
        # 加载主窗口
        # 初始化窗口
        pygame.display.init()
        # 设置窗口的大小及显示
        MainGame.window = pygame.display.set_mode([screen_width, screen_height]) # 窗口的设置使用当前window变量
        # 初始化我方坦克
        MainGame.my_tank = Tank(350,250)
        # 初始化敌方坦克,并将敌方坦克添加到列表中
        self.createEnemyTank()
        # 设置窗口的标题
        pygame.display.set_caption("坦克大战1.03")
        while True:
            # 使坦克移动的速度慢一点
            time.sleep(0.02)
            # 给窗口设置填充色
            MainGame.window.fill(bg_color)
            # 获取事件
            self.getEvent()
            # 绘制文字
            MainGame.window.blit(self.getTextSuface("敌方坦克剩余数量%d"%len(MainGame.enemyTankList)),(10,10))
            # 调用坦克显示的方法
            MainGame.my_tank.displayTank()
            # 循环遍历敌方坦克列表,展示敌方坦克
            self.blitEnemyTank()
            # 循环遍历我方坦克的子弹
            self.blitMyBullet()
            # 调用移动方法
            # 如果坦克的开关是开启,才可以移动
            if not MainGame.my_tank.stop:
                MainGame.my_tank.move()
            # 显示屏幕
            pygame.display.update()  # 屏幕一直显示 update:更新
    # 初始化敌方坦克,并将敌方坦克添加到列表中
    def createEnemyTank(self):    #create:创造
        top = 100
        # 循环生成敌方坦克
        for i in range(MainGame.enemyTankCount):
            left = random.randint(0,600)
            speed = random.randint(1,4)
            enemy = EnemyTank(left,top,speed)
            MainGame.enemyTankList.append(enemy)
    # 循环遍历敌方坦克列表,展示敌方坦克
    def blitEnemyTank(self):
        for enemyTank in MainGame.enemyTankList:
            enemyTank.displayTank()
            enemyTank.randMove()
    # 循环遍历我方子弹存储列表
    def blitMyBullet(self):
        for myBullet in MainGame.myBulletList:
            myBullet.displayBullet()

    # 结束游戏
    def endGame(self):
        print("游戏结束,欢迎再次使用")
        exit()                     #exit:退出
    # 左上角文字的绘制
    def getTextSuface(self, text):
        # 初始化字体模块
        pygame.font.init()
        # 查看所有字体
        #print(pygame.font.get_fonts())
        # 获取字体Font对象
        font = pygame.font.SysFont("kaiti",18)
        # 绘制文字信息
        textSuface = font.render(text, True, text_color)
        return textSuface
    # 获取事件
    def getEvent(self):
        # 获取所有事件
        eventList = pygame.event.get()  #eventList:事件列表
        # 遍历事件
        for event in eventList:
            # 判断按下的键是关闭还是键盘按下
            # 如果按的是退出,则关闭窗口
            if event.type == pygame.QUIT:
                self.endGame()
            # 如果是键盘的按下
            if event.type == pygame.KEYDOWN:  # KEYDOWN:按下
                # 判断按下的是上、下、左、右(键)
                if event.key == pygame.K_LEFT:
                    # 切换方向
                    MainGame.my_tank.direction = "L"
                    # 修改坦克的开关状态
                    MainGame.my_tank.stop = False
                    #MainGame.my_tank.move()
                    print("按下左键,坦克向左移动")
                elif event.key == pygame.K_RIGHT:
                    # 切换方向
                    MainGame.my_tank.direction = "R"
                    # 修改坦克的开关状态
                    MainGame.my_tank.stop = False
                    #MainGame.my_tank.move()
                    print("按下右键,坦克向右移动")
                elif event.key == pygame.K_UP:
                    # 切换方向
                    MainGame.my_tank.direction = "U"
                    # 修改坦克的开关状态
                    MainGame.my_tank.stop = False
                    #MainGame.my_tank.move()
                    print("按下上键,坦克向上移动")
                elif event.key == pygame.K_DOWN:
                    # 切换方向
                    MainGame.my_tank.direction = "D"
                    # 修改坦克的开关状态
                    MainGame.my_tank.stop = False
                    #MainGame.my_tank.move()
                    print("按下下键,坦克向下移动")
                elif event.key == pygame.K_SPACE:
                    print("发射子弹")
                    # 创建我方坦克发射的子弹
                    myBullet = Bullet(MainGame.my_tank)
                    MainGame.myBulletList.append(myBullet)

            # 松开方向键,坦克停止移动,修改坦克的开关状态
            if event.type == pygame.KEYUP:
                # 判断松开的键是上、下、左、右时候才停止坦克移动
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    MainGame.my_tank.stop = True

class Tank():
    # 添加距离左边left,距离上边top
    def __init__(self,left,top):
        # 保存加载的图片
        self.images = {
            "U":pygame.image.load("imgs/p1tankU.gif"),
            "D":pygame.image.load("imgs/p1tankD.gif"),
            "L":pygame.image.load("imgs/p1tankL.gif"),
            "R":pygame.image.load("imgs/p1tankR.gif"),
        }
        # 方向
        self.direction = "U"   # direction:方向   坦克默认方向朝上
        # 根据当前图片的方向获取图片 Suface
        self.image = self.images[self.direction]
        # 根据图片获取区域
        self.rect = self.image.get_rect()
        # 设置区域的left和top
        self.rect.left = left
        self.rect.top = top
        # 速度 决定移动的快慢
        self.speed = 5   # speed:速度
        # 坦克移动的开关
        self.stop = True

    # 移动
    def move(self):
        # 判断坦克的方向进行移动
        if self.direction == "L":
            if self.rect.left>0:           #我方坦克优化
                self.rect.left -= self.speed
        elif self.direction == "U":
            if self.rect.top>0:            #我方坦克优化
                self.rect.top -= self.speed
        elif self.direction == "D":
            if self.rect.top+self.rect.height<screen_height:
                self.rect.top += self.speed
        elif self.direction == "R":
            if self.rect.left+self.rect.height<screen_width:
                self.rect.left += self.speed
    # 射击
    def shot(self):
        pass
    # 展示坦克的方法
    def displayTank(self):    #display:显示、展示
        # 获取展示的对象
        self.image = self.images[self.direction]
        # 调用blit方法展示
        MainGame.window.blit(self.image, self.rect)
# 我方坦克
class MyTank(Tank):
    def __init__(self):
        pass

# 敌方坦克
class EnemyTank(Tank):
    def __init__(self,left,top,speed):
        # 加载图片集
        self.images = {
            "U":pygame.image.load("imgs/enemy1U.gif"),
            "D":pygame.image.load("imgs/enemy1D.gif"),
            "L":pygame.image.load("imgs/enemy1L.gif"),
            "R":pygame.image.load("imgs/enemy1R.gif"),
        }
        # 方向,随机生成敌方坦克的方向
        self.direction = self.randDirection() # rand:随机函数,随机生成
        # 根据方向获取图片
        self.image = self.images[self.direction]
        # 区域
        self.rect = self.image.get_rect()
        # 对left和top进行赋值
        self.rect.left = left
        self.rect.top = top
        # 速度
        self.speed = speed
        # 移动开关
        self.flag = True
        # 新增加一个步数变量 step
        self.step = 60        # step:步子、步数

        # 随机生成敌方坦克的方向
    def randDirection(self):
        num = random.randint(1,4)  #random:随机的。首先需调用random库,其次调用randint方法来生成随机数
        if num == 1:
            return "U"
        elif num == 2:
            return "D"
        elif num == 3:
            return "L"
        elif num == 4:
            return "R"
    # 敌方坦克随机移动的方法
    def randMove(self):
        if self.step<=0:
            # 修改方向
            self.direction =self.randDirection()
            # 让步数复位
            self.step = 60
        else:
            self.move()
            # 让步数递减
            self.step-=1

# 子弹类
class Bullet():
    def __init__(self, tank):
        # 加载图片
        self.image = pygame.image.load("imgs/enemymissile.gif")
        # 坦克的方向决定子弹的方向
        self.direction = tank.direction()
        # 获取区域
        self.rect = self.image.get_rect()
        # 子弹的left和top与方向有关
        if self.direction == "U":
            self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
            self.rect.top = tank.rect.top - self.rect.height
        elif self.direction == "D":
            self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
            self.rect.top = tank.rect.top + self.rect.height
        elif self.direction == "L":
            self.rect.left = tank.rect.left - tank.rect.width / 2 - self.rect.width / 2
            self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
        elif self.direction == "R":
            self.rect.left = tank.rect.left + tank.rect.width
            self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
        # 子弹的速度
        self.speed = 6
    # 移动
    def move(self):
        pass
    # 展示子弹的方法
    def displayBullet(self):
        # 将图片Suface加载到窗口
        MainGame.window.blit(self.image, self.rect)

# 墙壁类
class Wall():
    def __init__(self):
        pass
    # 展示墙壁的方法
    def displayWall(self):
        pass

# 爆炸效果类
class Explode():
    def __init__(self):
        pass
    # 展示爆炸效果的方法
    def displayExplode(self):
        pass

# 音效类
class Music():
    def __init__(self):
        pass
    # 播放音乐
    def play(self):
        pass

if __name__ == "__main__":
    MainGame().startGame()
    #MainGame().getTextSuface()

C:\Users\wmx\PycharmProjects\tankedazhan\venv\Scripts\python.exe C:/Users/wmx/PycharmProjects/tankedazhan/tanke13.py

pygame 1.9.6

Hello from the pygame community. https://www.pygame.org/contribute.html

按下上键,坦克向上移动

按下左键,坦克向左移动

Traceback (most recent call last):

  File "C:/Users/wmx/PycharmProjects/tankedazhan/tanke13.py", line 302, in <module>

    MainGame().startGame()

  File "C:/Users/wmx/PycharmProjects/tankedazhan/tanke13.py", line 41, in startGame

    self.getEvent()

  File "C:/Users/wmx/PycharmProjects/tankedazhan/tanke13.py", line 134, in getEvent

    myBullet = Bullet(MainGame.my_tank)

  File "C:/Users/wmx/PycharmProjects/tankedazhan/tanke13.py", line 251, in __init__

    self.direction = tank.direction()

TypeError: 'str' object is not callable

发射子弹


Process finished with exit code 1

老师 这报错信息说我STR对象不可调用 我找了几遍没找到问题在哪

Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 28727楼

老师你好!

虚拟机安装centos6.8 python3.8.2,出现以下问题:

python3.8.2正常安装后,使用virtualenv创建虚拟环境,报错:ModuleNotFoundError: No module named '_ssl'

查找资料,修改Setup文件 重新安装报错:

[root@Tinywang Python-3.8.2]# make -j 4 && make install

gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall    -std=c99 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration  -I./Include/internal  -I. -I./Include    -DPy_BUILD_CORE_BUILTIN  -DUSE_SSL -I/usr/local/ssl/include -I/usr/local/ssl/include/openssl -c ./Modules/_ssl.c -o Modules/_ssl.o

./Modules/_ssl.c:74:6: 错误:#error "libssl is too old and does not support X509_VERIFY_PARAM_set1_host()"

./Modules/_ssl.c: 在函数‘_ssl_configure_hostname’中:

./Modules/_ssl.c:891: 错误:隐式声明函数‘SSL_get0_param’

./Modules/_ssl.c:891: 警告:初始化时将整数赋给指针,未作类型转换

./Modules/_ssl.c:893: 错误:隐式声明函数‘X509_VERIFY_PARAM_set1_host’

./Modules/_ssl.c:899: 错误:隐式声明函数‘X509_VERIFY_PARAM_set1_ip’

./Modules/_ssl.c: 在函数‘_ssl__SSLContext_impl’中:

./Modules/_ssl.c:3130: 错误:‘X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS’未声明(在此函数内第一次使用)

./Modules/_ssl.c:3130: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其

./Modules/_ssl.c:3130: 错误:所在的函数内也只报告一次。)

./Modules/_ssl.c:3240: 错误:隐式声明函数‘SSL_CTX_get0_param’

./Modules/_ssl.c:3240: 警告:赋值时将整数赋给指针,未作类型转换

./Modules/_ssl.c:3246: 错误:隐式声明函数‘X509_VERIFY_PARAM_set_hostflags’

./Modules/_ssl.c: 在函数‘get_verify_flags’中:

./Modules/_ssl.c:3555: 警告:赋值时将整数赋给指针,未作类型转换

./Modules/_ssl.c: 在函数‘set_verify_flags’中:

./Modules/_ssl.c:3568: 警告:赋值时将整数赋给指针,未作类型转换

./Modules/_ssl.c: 在函数‘set_host_flags’中:

./Modules/_ssl.c:3764: 警告:赋值时将整数赋给指针,未作类型转换

make: *** [Modules/_ssl.o] 错误 1


Python 全系列/下架-第十二阶段:Python_大型电商项目(5天后下架)/Django项目阶段-电商项目(旧) 28729楼
JAVA 全系列/第二十七阶段:JVM实战和BATJ大厂面试重难点/JVM调优 28730楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 28732楼

com.bjsxtjava.sql.Connectionjava.sql.DriverManagerjava.sql.SQLExceptionjava.sql.StatementJdbcTest {
    (String department_namelocation_id){
        Connection conn = Statement statement = {
            Class.()conn =
            DriverManager.()String sql = +department_name++location_id+statement = conn.createStatement()i = statement.executeUpdate(sql)System..println(i)} (Exception e) {
            e.printStackTrace()}{
            (statement!=){
                {
                    statement.close()} (SQLException e) {
                    e.printStackTrace()}
            }

            (conn!=){
                {
                    conn.close()} (SQLException e) {
                    e.printStackTrace()}
            }
        }
    }
    (String[] args) {
        JdbcTest jdbc = JdbcTest()jdbc.insertDepartments()}
}


按照视频来的,怎么有这个错误

Fri Oct 16 00:23:35 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '8)' at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)

at com.mysql.jdbc.Util.getInstance(Util.java:408)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2491)

at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)

at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607)

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480)

at com.bjsxt.JdbcTest.insertDepartments(JdbcTest.java:23)

at com.bjsxt.JdbcTest.main(JdbcTest.java:49)


Process finished with exit code 0


怎么解

JAVA 全系列/第三阶段:数据库编程/JDBC技术(旧) 28735楼
JAVA 全系列/第九阶段:Spring Boot实战/Spring Boot 28736楼

老师我的项目出现了一个很奇怪的bug,当我跟老师一样添加c.tld文件之后再添加 taglib 指令标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>代码里面的forEach关键字出现异常的红色,此时启动Tomcat报错

image.png

报错信息如下:

image.png

D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\bin\catalina.bat run

[2020-10-15 09:50:43,165] Artifact mybatiswebdemoTest:war exploded: Waiting for server connection to start artifact deployment...

Using CATALINA_BASE:   "C:\Users\admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_9_0_34_mybatiswebdemoTest"

Using CATALINA_HOME:   "D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34"

Using CATALINA_TMPDIR: "D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\temp"

Using JRE_HOME:        "D:\Java\jdk-14.0.2_windows-x64_bin\jdk-14.0.2"

Using CLASSPATH:       "D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\bin\bootstrap.jar;D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\bin\tomcat-juli.jar"

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

15-Oct-2020 21:50:44.590 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本:     Apache Tomcat/9.0.34

15-Oct-2020 21:50:44.592 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建:            Apr 3 2020 12:02:52 UTC

15-Oct-2020 21:50:44.593 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本号(:9.0.34.0

15-Oct-2020 21:50:44.594 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10

15-Oct-2020 21:50:44.594 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS.版本:               10.0

15-Oct-2020 21:50:44.594 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 架构:                  amd64

15-Oct-2020 21:50:44.594 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量:         D:\Java\jdk-14.0.2_windows-x64_bin\jdk-14.0.2

15-Oct-2020 21:50:44.594 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 版本:              14.0.2+12-46

15-Oct-2020 21:50:44.594 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM.供应商:            Oracle Corporation

15-Oct-2020 21:50:44.595 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:[C:\Users\admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_9_0_34_mybatiswebdemoTest]

15-Oct-2020 21:50:44.596 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34

15-Oct-2020 21:50:44.597 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[--add-opens=java.base/java.lang=ALL-UNNAMED]

15-Oct-2020 21:50:44.597 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[--add-opens=java.base/java.io=ALL-UNNAMED]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Djava.util.logging.config.file=C:\Users\admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_9_0_34_mybatiswebdemoTest\conf\logging.properties]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcom.sun.management.jmxremote=]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcom.sun.management.jmxremote.port=1099]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcom.sun.management.jmxremote.ssl=false]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcom.sun.management.jmxremote.password.file=C:\Users\admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_9_0_34_mybatiswebdemoTest\jmxremote.password]

15-Oct-2020 21:50:44.598 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcom.sun.management.jmxremote.access.file=C:\Users\admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_9_0_34_mybatiswebdemoTest\jmxremote.access]

15-Oct-2020 21:50:44.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Djava.rmi.server.hostname=127.0.0.1]

15-Oct-2020 21:50:44.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Djdk.tls.ephemeralDHKeySize=2048]

15-Oct-2020 21:50:44.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Djava.protocol.handler.pkgs=org.apache.catalina.webresources]

15-Oct-2020 21:50:44.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dignore.endorsed.dirs=]

15-Oct-2020 21:50:44.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcatalina.base=C:\Users\admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_9_0_34_mybatiswebdemoTest]

15-Oct-2020 21:50:44.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Dcatalina.home=D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34]

15-Oct-2020 21:50:44.600 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:[-Djava.io.tmpdir=D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\temp]

15-Oct-2020 21:50:44.600 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.23] using APR version [1.7.0].

15-Oct-2020 21:50:44.600 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

15-Oct-2020 21:50:44.601 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL配置:useAprConnector[false],useOpenSSL[true]

15-Oct-2020 21:50:44.610 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1c  28 May 2019]

15-Oct-2020 21:50:44.878 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8080"]

15-Oct-2020 21:50:44.970 信息 [main] org.apache.catalina.startup.Catalina.load 服务器在[726]毫秒内初始化

15-Oct-2020 21:50:45.031 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]

15-Oct-2020 21:50:45.031 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/9.0.34]

15-Oct-2020 21:50:45.470 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"]

15-Oct-2020 21:50:45.489 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in [519] milliseconds

Connected to server

[2020-10-15 09:50:45,967] Artifact mybatiswebdemoTest:war exploded: Artifact is being deployed, please wait...

15-Oct-2020 21:50:47.175 信息 [RMI TCP Connection(5)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。

[2020-10-15 09:50:47,196] Artifact mybatiswebdemoTest:war exploded: Artifact is deployed successfully

[2020-10-15 09:50:47,196] Artifact mybatiswebdemoTest:war exploded: Deploy took 1,229 milliseconds

<2020-10-15 21:50:48,065> DEBUG (LogFactory.java:105) [http-nio-8080-exec-1] (org.apache.ibatis.logging.LogFactory) - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.

<2020-10-15 21:50:48,081> DEBUG (VFS.java:116) [http-nio-8080-exec-1] (org.apache.ibatis.io.VFS) - Class not found: org.jboss.vfs.VFS

<2020-10-15 21:50:48,081> DEBUG (JBoss6VFS.java:149) [http-nio-8080-exec-1] (org.apache.ibatis.io.JBoss6VFS) - JBoss 6 VFS API is not available in this environment.

<2020-10-15 21:50:48,085> DEBUG (VFS.java:116) [http-nio-8080-exec-1] (org.apache.ibatis.io.VFS) - Class not found: org.jboss.vfs.VirtualFile

<2020-10-15 21:50:48,087> DEBUG (VFS.java:64) [http-nio-8080-exec-1] (org.apache.ibatis.io.VFS) - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.

<2020-10-15 21:50:48,087> DEBUG (VFS.java:74) [http-nio-8080-exec-1] (org.apache.ibatis.io.VFS) - Using VFS adapter org.apache.ibatis.io.DefaultVFS

<2020-10-15 21:50:48,090> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/

<2020-10-15 21:50:48,091> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/

<2020-10-15 21:50:48,128> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: Users.class

<2020-10-15 21:50:48,131> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: UsersExample.class

<2020-10-15 21:50:48,135> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: UsersExample$Criteria.class

<2020-10-15 21:50:48,139> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: UsersExample$Criterion.class

<2020-10-15 21:50:48,142> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: UsersExample$GeneratedCriteria.class

<2020-10-15 21:50:48,145> DEBUG (DefaultVFS.java:111) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Listing file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/

<2020-10-15 21:50:48,145> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/Users.class

<2020-10-15 21:50:48,146> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/Users.class

<2020-10-15 21:50:48,148> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: 漱壕   : ?

<2020-10-15 21:50:48,150> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample.class

<2020-10-15 21:50:48,150> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample.class

<2020-10-15 21:50:48,151> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: 漱壕   : O

<2020-10-15 21:50:48,153> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample$Criteria.class

<2020-10-15 21:50:48,153> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample$Criteria.class

<2020-10-15 21:50:48,154> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: 漱壕   : ?

<2020-10-15 21:50:48,157> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample$Criterion.class

<2020-10-15 21:50:48,158> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample$Criterion.class

<2020-10-15 21:50:48,159> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: 漱壕   : I       %com/bjsxt/pojo/UsersExample$Criterion  condition Ljava/lang/String;     

<2020-10-15 21:50:48,160> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample$GeneratedCriteria.class

<2020-10-15 21:50:48,161> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/pojo/UsersExample$GeneratedCriteria.class

<2020-10-15 21:50:48,162> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: 漱壕   : ?

<2020-10-15 21:50:48,163> DEBUG (ResolverUtil.java:288) [http-nio-8080-exec-1] (org.apache.ibatis.io.ResolverUtil) - Checking to see if class com.bjsxt.pojo.Users matches criteria [is assignable to Object]

<2020-10-15 21:50:48,163> DEBUG (ResolverUtil.java:288) [http-nio-8080-exec-1] (org.apache.ibatis.io.ResolverUtil) - Checking to see if class com.bjsxt.pojo.UsersExample matches criteria [is assignable to Object]

<2020-10-15 21:50:48,169> DEBUG (ResolverUtil.java:288) [http-nio-8080-exec-1] (org.apache.ibatis.io.ResolverUtil) - Checking to see if class com.bjsxt.pojo.UsersExample$Criteria matches criteria [is assignable to Object]

<2020-10-15 21:50:48,177> DEBUG (ResolverUtil.java:288) [http-nio-8080-exec-1] (org.apache.ibatis.io.ResolverUtil) - Checking to see if class com.bjsxt.pojo.UsersExample$Criterion matches criteria [is assignable to Object]

<2020-10-15 21:50:48,181> DEBUG (ResolverUtil.java:288) [http-nio-8080-exec-1] (org.apache.ibatis.io.ResolverUtil) - Checking to see if class com.bjsxt.pojo.UsersExample$GeneratedCriteria matches criteria [is assignable to Object]

<2020-10-15 21:50:48,305> DEBUG (PooledDataSource.java:363) [http-nio-8080-exec-1] (org.apache.ibatis.datasource.pooled.PooledDataSource) - PooledDataSource forcefully closed/removed all connections.

<2020-10-15 21:50:48,305> DEBUG (PooledDataSource.java:363) [http-nio-8080-exec-1] (org.apache.ibatis.datasource.pooled.PooledDataSource) - PooledDataSource forcefully closed/removed all connections.

<2020-10-15 21:50:48,305> DEBUG (PooledDataSource.java:363) [http-nio-8080-exec-1] (org.apache.ibatis.datasource.pooled.PooledDataSource) - PooledDataSource forcefully closed/removed all connections.

<2020-10-15 21:50:48,305> DEBUG (PooledDataSource.java:363) [http-nio-8080-exec-1] (org.apache.ibatis.datasource.pooled.PooledDataSource) - PooledDataSource forcefully closed/removed all connections.

<2020-10-15 21:50:48,315> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/

<2020-10-15 21:50:48,315> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/

<2020-10-15 21:50:48,317> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: UsersMapper.class

<2020-10-15 21:50:48,321> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: UsersMapper.xml

<2020-10-15 21:50:48,324> DEBUG (DefaultVFS.java:111) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Listing file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/

<2020-10-15 21:50:48,324> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/UsersMapper.class

<2020-10-15 21:50:48,325> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/UsersMapper.class

<2020-10-15 21:50:48,326> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: 漱壕   :   com/bjsxt/mapper/UsersMapper  java/lang/Object countByExample  (Lcom/bjsxt/pojo/UsersExample;)I deleteByExample deleteByPrimaryKey (Ljava/lang/Integer;)I insert (Lcom/bjsxt/pojo/Users;)I insertSelective selectByExample /(Lcom/bjsxt/pojo/UsersExample;)Ljava/util/List;  Signature G(Lcom/bjsxt/pojo/UsersExample;)Ljava/util/List<Lcom/bjsxt/pojo/Users;>; selectByPrimaryKey +(Ljava/lang/Integer;)Lcom/bjsxt/pojo/Users; updateByExampleSelective 6(Lcom/bjsxt/pojo/Users;Lcom/bjsxt/pojo/UsersExample;)I "RuntimeVisibleParameterAnnotations %Lorg/apache/ibatis/annotations/Param; value record example updateByExample updateByPrimaryKeySelective updateByPrimaryKey 

<2020-10-15 21:50:48,328> DEBUG (DefaultVFS.java:220) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Find JAR URL: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/UsersMapper.xml

<2020-10-15 21:50:48,328> DEBUG (DefaultVFS.java:247) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Not a JAR: file:/D:/J2EE项目/MybatisProject/mybatiswebdemoTest/out/artifacts/mybatiswebdemoTest_war_exploded/WEB-INF/classes/com/bjsxt/mapper/UsersMapper.xml

<2020-10-15 21:50:48,329> DEBUG (DefaultVFS.java:100) [http-nio-8080-exec-1] (org.apache.ibatis.io.DefaultVFS) - Reader entry: <?xml version="1.0" encoding="UTF-8" ?>

<2020-10-15 21:50:48,330> DEBUG (ResolverUtil.java:288) [http-nio-8080-exec-1] (org.apache.ibatis.io.ResolverUtil) - Checking to see if class com.bjsxt.mapper.UsersMapper matches criteria [is assignable to Object]

<2020-10-15 21:50:54,031> DEBUG (LoggingCache.java:60) [http-nio-8080-exec-5] (SQL_CACHE) - Cache Hit Ratio [SQL_CACHE]: 0.0

<2020-10-15 21:50:54,138> DEBUG (JdbcTransaction.java:137) [http-nio-8080-exec-5] (org.apache.ibatis.transaction.jdbc.JdbcTransaction) - Opening JDBC Connection

Thu Oct 15 21:50:54 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

<2020-10-15 21:50:54,582> DEBUG (PooledDataSource.java:434) [http-nio-8080-exec-5] (org.apache.ibatis.datasource.pooled.PooledDataSource) - Created connection 1614127273.

<2020-10-15 21:50:54,582> DEBUG (JdbcTransaction.java:101) [http-nio-8080-exec-5] (org.apache.ibatis.transaction.jdbc.JdbcTransaction) - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6035a0a9]

<2020-10-15 21:50:54,591> DEBUG (BaseJdbcLogger.java:137) [http-nio-8080-exec-5] (com.bjsxt.mapper.UsersMapper.selectByExample_COUNT) - ==>  Preparing: SELECT count(0) FROM users

<2020-10-15 21:50:54,642> DEBUG (BaseJdbcLogger.java:137) [http-nio-8080-exec-5] (com.bjsxt.mapper.UsersMapper.selectByExample_COUNT) - ==> Parameters: 

<2020-10-15 21:50:54,685> DEBUG (BaseJdbcLogger.java:137) [http-nio-8080-exec-5] (com.bjsxt.mapper.UsersMapper.selectByExample_COUNT) - <==      Total: 1

<2020-10-15 21:50:54,701> DEBUG (BaseJdbcLogger.java:137) [http-nio-8080-exec-5] (com.bjsxt.mapper.UsersMapper.selectByExample) - ==>  Preparing: select userid, username, usersex from users LIMIT ?

<2020-10-15 21:50:54,701> DEBUG (BaseJdbcLogger.java:137) [http-nio-8080-exec-5] (com.bjsxt.mapper.UsersMapper.selectByExample) - ==> Parameters: 2(Integer)

org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)

at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:294)

at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:81)

at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:251)

<2020-10-15 21:50:54,704> DEBUG (BaseJdbcLogger.java:137) [http-nio-8080-exec-5] (com.bjsxt.mapper.UsersMapper.selectByExample) - <==      Total: 2

<2020-10-15 21:50:54,734> DEBUG (JdbcTransaction.java:123) [http-nio-8080-exec-5] (org.apache.ibatis.transaction.jdbc.JdbcTransaction) - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6035a0a9]

<2020-10-15 21:50:54,735> DEBUG (JdbcTransaction.java:91) [http-nio-8080-exec-5] (org.apache.ibatis.transaction.jdbc.JdbcTransaction) - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6035a0a9]

<2020-10-15 21:50:54,736> DEBUG (PooledDataSource.java:391) [http-nio-8080-exec-5] (org.apache.ibatis.datasource.pooled.PooledDataSource) - Returned connection 1614127273 to pool.

at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:122)

at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:431)

at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:489)

at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1445)

at org.apache.jasper.compiler.Parser.parse(Parser.java:144)

at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)

at org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)

at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:206)

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:386)

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)

at org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)

at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)

at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)

at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)

at com.bjsxt.web.servlet.UsersServlet.findUsers(UsersServlet.java:91)

at com.bjsxt.web.servlet.UsersServlet.doPost(UsersServlet.java:36)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at com.bjsxt.web.filter.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:29)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.base/java.lang.Thread.run(Thread.java:832)

15-Oct-2020 21:50:55.474 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\webapps\manager]

15-Oct-2020 21:50:55.576 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Tomcat\apache-tomcat-9.0.34-windows-x64\apache-tomcat-9.0.34\webapps\manager] has finished in [102] ms



且客户端浏览器无法加载showUsers.jsp

image.png


如果去掉 taglib 指令标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


则forEach关键字不报错

image.png


此时启动Tomcat可以加载到showUsers.jsp但是不显示数据

image.png



我在网上查到了一个解决办法但是不敢乱来,还是想听听老师的意见

image.png


以下是源码

UsersServlet

package com.bjsxt.web.servlet;

import com.bjsxt.pojo.Users;
import com.bjsxt.pojo.UsersExample;
import com.bjsxt.service.UsersService;
import com.bjsxt.service.impl.UsersServiceImpl;
import com.github.pagehelper.PageInfo;

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;

@WebServlet("/usersServlet.do")
public class UsersServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

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

        /*设置请求编码格式*/
        req.setCharacterEncoding("utf-8");

        /*设置响应编码格式*/
        resp.setContentType("text/html;charset=utf-8");

        String flag = req.getParameter("flag");
        if("addUsers".equals(flag)){
            this.addUsers(req,resp);
        }else if("findUsers".equals(flag)){
            this.findUsers(req,resp);
        }
    }

    private void addUsers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取用户提交数据
        Users users = this.createUsers(req);

        //实例化业务层对象
        UsersService usersService = new UsersServiceImpl();
        usersService.addUsers(users);

        //为避免重复提交,使用重定向到成功页面
        resp.sendRedirect("ok.jsp");

    }

    /**
     * 获取用户提交的信息
     */
    private Users createUsers(HttpServletRequest req) {

        String username = req.getParameter("username");
        String usersex = req.getParameter("usersex");

        Users users = new Users();
        users.setUsername(username);
        users.setUsersex(usersex);

        return users;
    }

    /**
     * 查询用户
     */
    private void findUsers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取用户提交的数据
        Users users = this.createUsers(req);
        //获取当前页
        String pageIndex = req.getParameter("pageIndex");
        int page = 1;
        if (pageIndex != null && pageIndex.length() > 0) {
            //强转
            page = Integer.parseInt(pageIndex);
        }
        UsersService usersService = new UsersServiceImpl();
        PageInfo<Users> pageInfo = usersService.findUsers(page, users);

        //传递数据
        req.setAttribute("pageInfo", pageInfo);
        //为了避免魔鬼查询得维持住查询条件得把封装了查询条件的users对象一起传过去
        req.setAttribute("users", users);

        //有数据传递得用请求转发
        req.getRequestDispatcher("showUsers.jsp").forward(req,resp);

    }

}


UsersServiceImpl

package com.bjsxt.service.impl;

import com.bjsxt.mapper.UsersMapper;
import com.bjsxt.pojo.Users;
import com.bjsxt.pojo.UsersExample;
import com.bjsxt.service.UsersService;
import com.bjsxt.utils.MybatisUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UsersServiceImpl implements UsersService {

    @Override
    public void addUsers(Users users) {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //通过getMapper()方法获取UsersMapper接口实现类的代理对象
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        mapper.insertSelective(users);
    }

    /**
     * 查询用户
     * @param page
     * @param users
     * @return
     */
    @Override
    public PageInfo<Users> findUsers(int page, Users users) {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //通过getMapper()方法获取UsersMapper接口实现类的代理对象
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        //获取条件
        UsersExample usersExample = this.createUsersExample(users);

        PageHelper.startPage(page, 2);

        List<Users> list = mapper.selectByExample(usersExample);

        //将list放到pageInfo中      pageInfo:封装了基于分页查询得到的结果集的实体类
        PageInfo<Users> pageInfo = new PageInfo<>(list);

        return pageInfo;
    }

    /**
     * 生成查询条件
     */
    private UsersExample createUsersExample(Users users){
        UsersExample usersExample = new UsersExample();
        UsersExample.Criteria criteria = usersExample.createCriteria();
        if(users.getUsername() != null && users.getUsername().length() > 0){
            criteria.andUsernameEqualTo(users.getUsername());
        }
        if(users.getUsersex() != null && users.getUsersex().length() > 0){
            criteria.andUsersexEqualTo(users.getUsersex());
        }

        return usersExample;
    }

}



showUsers.jsp

<%--
  Created by IntelliJ IDEA.
  User: admin
  Date: 2020/10/15
  Time: 19:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>显示查询结果</title>
</head>
<body>
<table align="center" border="1" width="40%">
    <tr>
        <th>用户 ID</th>
        <th>用户姓名</th>
        <th>用户性别</th>
    </tr>
    <c:forEach items="${pageInfo.list}" var="users">
        <tr>
            <td>${users.userid}</td>
            <td>${users.username}</td>
            <td>${users.usersex}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>


求老师指点我该怎么解决


















JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 28739楼
JAVA 全系列/第九阶段:Spring Boot实战/Spring Boot 28740楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637