実現したいこと
ClassNotFoundException:エラーを解決したい
前提
MVCモデルを勉強しています。
search.jspにて、検索キーワードを入力したらデータベース検索し、list.jspにて検索結果を表示させたいのですが、検索するとClassNotFoundException:が出てきて解決されません。
よろしくお願いします
発生している問題・エラーメッセージ
java.lang.ClassNotFoundException: SearchAction at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1353) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1165) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:421) at java.base/java.lang.Class.forName(Class.java:412) at tool.FrontController.doPost(FrontController.java:43) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at tool.EncordingFilter.doFilter(EncordingFilter.java:30) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:1583)
該当のソースコード
Action.java
java
1//アクションクラスのスーパークラス 2package tool; 3 4import jakarta.servlet.http.HttpServletRequest; 5import jakarta.servlet.http.HttpServletResponse; 6 7public abstract class Action { 8 9 public abstract String execute( 10 HttpServletRequest request, HttpServletResponse response 11 ) throws Exception; 12}
SearchAction.java
Java
1 2package chapter23; 3 4import java.util.List; 5 6import bean.Product; 7import dao.ProductDAO; 8import jakarta.servlet.http.HttpServletRequest; 9import jakarta.servlet.http.HttpServletResponse; 10import tool.Action; 11 12public class SearchAction extends Action{ 13 14 public String execute( 15 HttpServletRequest request, HttpServletResponse response 16 ) throws Exception{ 17 String keyword=request.getParameter("keyword"); 18 19 ProductDAO dao=new ProductDAO(); 20 List<Product> list=dao.search(keyword); 21 22 request.setAttribute("list", list); 23 return "list.jsp"; 24 25 } 26 27} 28
FrontController.java
Java
1//コントローラーのクラス 2package tool; 3 4import java.io.IOException; 5import java.io.PrintWriter; 6 7import jakarta.servlet.ServletException; 8import jakarta.servlet.annotation.WebServlet; 9import jakarta.servlet.http.HttpServlet; 10import jakarta.servlet.http.HttpServletRequest; 11import jakarta.servlet.http.HttpServletResponse; 12 13/** 14 * Servlet implementation class FrontController 15 */ 16@WebServlet(urlPatterns= {"*.action"}) 17public class FrontController extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#HttpServlet() 22 */ 23 public FrontController() { 24 super(); 25 // TODO Auto-generated constructor stub 26 } 27 28 29 30 /** 31 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 32 */ 33 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 34 // TODO Auto-generated method stub 35 //doGet(request, response); 36 PrintWriter out=response.getWriter(); 37 System.out.print("ビンゴ"); 38 39 40 41 try { 42 String path=request.getServletPath().substring(1); 43 String name=path.replace(".a", "A").replace('/', '.'); 44 Action action=(Action)Class.forName(name).getDeclaredConstructor().newInstance(); 45 String url=action.execute(request, response); 46// System.out.print(url); 47// String url1="WEB-INF/jsp/"; 48 request.getRequestDispatcher(url).forward(request,response); 49 }catch(Exception e) { 50 e.printStackTrace(out); 51 } 52 } 53 54 /** 55 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 56 */ 57 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 58 // TODO Auto-generated method stub 59 //response.getWriter().append("Served at: ").append(request.getContextPath()); 60 doPost(request,response); 61 } 62 63} 64
search.jsp
jsp
1//検索するjsp 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4 <%@ include file="header.jsp" %> 5 <p>検索キーワードを入力してください</p> 6 <form action="Search.action" method="post"> 7 <input type="text" name="keyword"> 8 <input type="submit" value="検索"> 9 10 </form> 11 <%@ include file="footer.jsp" %> 12
list.jsp
jsp
1//検索結果を表示するjsp 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4 <%@ include file="header.jsp" %> 5 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 6 7 list.jspだよ 8 <c:forEach var="p" items="${list }"> 9 10 ${p.id}: ${p.name}: ${p.price} 11</c:forEach> 12 <%@ include file="footer.jsp" %>
試したこと
SearchActionクラスが見つからないとエラーが言っているのでFrontController.javaが原因だとは思うのですが、何が間違ってい折るのか分かりません。
補足情報(FW/ツールのバージョンなど)
サーバー情報:Tomcat10Java21
回答2件
あなたの回答
tips
プレビュー