正在回答 回答被采纳积分+1
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at com.imooc.jdbc.common.ConnectionUtil.getConnection(ConnectionUtil.java:39)
at com.imooc.jdbc.dao.MessageDAO.getMessages(MessageDAO.java:55)
at com.imooc.jdbc.service.MessageService.getMessages(MessageService.java:34)
at com.imooc.jdbc.servlet.MessageListServlet.service(MessageListServlet.java:41)
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:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.imooc.jdbc.filter.UserFilter.doFilter(UserFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.imooc.jdbc.filter.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:28)
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:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:830)
同学, 你好!是看控制台输出,不是这里。启动服务器后,下面选中的内容是控制台

另外,将浏览器中的路径改成http://localhost:8080/message/list.do ,再运行试试
祝学习愉快!
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> <error-page> <error-code>404</error-code> <location>/WEB-INF/views/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/views/error/500.jsp</location> </error-page> <servlet> <servlet-name>MessageListServlet</servlet-name> <servlet-class>com.imooc.jdbc.servlet.MessageListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MessageListServlet</servlet-name> <url-pattern>/message/list.do</url-pattern> </servlet-mapping> </web-app>
package com.imooc.jdbc.servlet;
import com.imooc.jdbc.bean.Message;
import com.imooc.jdbc.service.MesaageService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class MessageListServlet extends HttpServlet {
private MesaageService mesaageService;
@Override
public void init() throws ServletException {
super.init();
mesaageService = new MesaageService();
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("=============进入MessageListServlet===================");
String pageStr = request.getParameter("page"); //当前页码
int page = 1;/* 页码默认值为1 */
if (null != pageStr && (!"".equals(pageStr))){
try{
page = Integer.parseInt(pageStr);
} catch (Exception e) {
e.printStackTrace();
}
}
List<Message> messages = mesaageService.getMessage(page,5);//分页查询全部留言
int count = mesaageService.countMessage();
int last = count % 5 == 0 ? (count / 5) : ((count / 5) + 1);
request.setAttribute("last",last);
request.setAttribute("messages",messages);
request.setAttribute("page",page);
request.getRequestDispatcher("/WEB-INF/views/biz/message_list.jsp").forward(request,response);
}
@Override
public void destroy() {
super.destroy();
mesaageService = null;
}
}package com.imooc.jdbc.dao;
import com.imooc.jdbc.bean.Message;
import com.imooc.jdbc.common.ConnectionUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* 消息的DAO
*/
public class MessageDAO {
/**
* 分页查询全部留言
* @param page 当前页码
* @param pageSize 每一页记录数
* @return
*/
public List<Message> getMessage(int page,int pageSize){
Connection conn = ConnectionUtil.getConnection();
String sql = "select * from message order by create_time desc limit ?,?";//limit m,n:从第m条开始,取出总共n条记录
PreparedStatement pstmt = null;
ResultSet rs = null;
List<Message> messages = new ArrayList<Message>();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,(page - 1) * pageSize);
pstmt.setInt(2,pageSize);
rs = pstmt.executeQuery();
while (rs.next()){
messages.add(new Message(rs.getLong("id"),rs.getLong("user_id"),rs.getString("username"),
rs.getString("title"),rs.getString("content"),rs.getTimestamp("create_time")));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnectionUtil.release(rs,pstmt,conn);
}
return messages;
}
/**
* 计算所有留言数量
* @return
*/
public int countMessage(){
Connection conn = ConnectionUtil.getConnection();
String sql = "select count(*) total from message";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()){
return rs.getInt("total");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
ConnectionUtil.release(rs,pstmt,conn);
}
return 0;
}
}老师。我改完之后页面还是出现404
同学,你好!这两个url不一样,首先说一下Servlet的配置。下面选中的内容是url-pattern的值。就是之前学习过程中Servlet的访问路径,比如之前配置的是servlet1。那么访问地址就是http://localhost:8080/工程名/servlet1,就可以访问Servlet了。而这里只是给url-pattern起了一个比较特殊的名字,/message/list.do等价于/servlet1。在开发过程中,习惯路径名以.do结尾

然后再来看一下Application context,在IDEA中的Application context就相当于我们之前在Eclipse工程中访问url时的工程名。其实准确的说法不是工程名,实际上就是Application context。只是在Eclipse中默认的Application context是工程名。IDEA中的Application Context可以写成/,/后的内容都去掉。这时候访问路径就是http://localhost:8080/message/list.do。如果Application context值为/MyProject,则访问路径就是:http://localhost:8080/MyProject/message/list.do

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
老师,这两张图的url要一样吗?list.do是做什么的?我都试了可是还是报404错误









恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星