老师,出现一个问题
运行后,页面显示空白,在控制台有已下错误
D:\java\apache-tomcat-8.5.43\bin\catalina.bat run [2019-11-23 01:35:01,515] Artifact icake:war exploded: Waiting for server connection to start artifact deployment... Using CATALINA_BASE: "C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_icake" Using CATALINA_HOME: "D:\java\apache-tomcat-8.5.43" Using CATALINA_TMPDIR: "D:\java\apache-tomcat-8.5.43\temp" Using JRE_HOME: "C:\Program Files\Java\jdk1.8.0_101" Using CLASSPATH: "D:\java\apache-tomcat-8.5.43\bin\bootstrap.jar;D:\java\apache-tomcat-8.5.43\bin\tomcat-juli.jar" Connected to the target VM, address: '127.0.0.1:50930', transport: 'socket' 23-Nov-2019 01:35:02.578 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.43 23-Nov-2019 01:35:02.583 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 4 2019 20:53:15 UTC 23-Nov-2019 01:35:02.583 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.43.0 23-Nov-2019 01:35:02.583 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Windows 7 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 6.1 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: C:\Program Files\Java\jdk1.8.0_101\jre 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_101-b13 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_icake 23-Nov-2019 01:35:02.584 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: D:\java\apache-tomcat-8.5.43 23-Nov-2019 01:35:02.587 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_icake\conf\logging.properties 23-Nov-2019 01:35:02.588 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 23-Nov-2019 01:35:02.588 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50930,suspend=y,server=n 23-Nov-2019 01:35:02.588 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -javaagent:C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\captureAgent\debugger-agent.jar 23-Nov-2019 01:35:02.588 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote= 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.password.file=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_icake\jmxremote.password 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.access.file=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_icake\jmxremote.access 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 23-Nov-2019 01:35:02.589 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 23-Nov-2019 01:35:02.590 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs= 23-Nov-2019 01:35:02.590 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_icake 23-Nov-2019 01:35:02.590 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=D:\java\apache-tomcat-8.5.43 23-Nov-2019 01:35:02.590 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=D:\java\apache-tomcat-8.5.43\temp 23-Nov-2019 01:35:02.590 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.23] using APR version [1.7.0]. 23-Nov-2019 01:35:02.590 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. 23-Nov-2019 01:35:02.591 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 23-Nov-2019 01:35:02.600 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1c 28 May 2019] 23-Nov-2019 01:35:02.776 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"] 23-Nov-2019 01:35:02.798 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 23-Nov-2019 01:35:02.820 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"] 23-Nov-2019 01:35:02.824 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 23-Nov-2019 01:35:02.825 信息 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 716 ms 23-Nov-2019 01:35:02.876 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 23-Nov-2019 01:35:02.877 信息 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.43 23-Nov-2019 01:35:02.890 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 23-Nov-2019 01:35:02.907 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 23-Nov-2019 01:35:02.911 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 86 ms Connected to server [2019-11-23 01:35:03,208] Artifact icake:war exploded: Artifact is being deployed, please wait... 23-Nov-2019 01:35:04.645 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. [2019-11-23 01:35:04,782] Artifact icake:war exploded: Artifact is deployed successfully [2019-11-23 01:35:04,782] Artifact icake:war exploded: Deploy took 1,574 milliseconds java.lang.ClassNotFoundException: com.imooc.icake.Controller.CatalogController com.imooc.icake.Controller.CatalogController at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1360) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1182) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.imooc.icake.global.GlobalController.service(GlobalController.java:55) 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.icake.global.EncodingFilter.doFilter(EncodingFilter.java:18) 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:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660) 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:808) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) com.imooc.icake.Controller.CatalogController java.lang.ClassNotFoundException: com.imooc.icake.Controller.CatalogController at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1360) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1182) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.imooc.icake.global.GlobalController.service(GlobalController.java:55) 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.icake.global.EncodingFilter.doFilter(EncodingFilter.java:18) 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:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660) 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:808) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 23-Nov-2019 01:35:12.892 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [D:\java\apache-tomcat-8.5.43\webapps\manager] 23-Nov-2019 01:35:13.071 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 23-Nov-2019 01:35:13.089 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\java\apache-tomcat-8.5.43\webapps\manager] has finished in [196] ms
我的GlobalController
package com.imooc.icake.global;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class GlobalController extends GenericServlet {
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
/*
.do
/login.do DefaultController login
/Cake/detail.do CakeController detail
/admin/Cake/add.do CakeController add
*/
//强制类型转换
HttpServletRequest request=(HttpServletRequest) servletRequest;
HttpServletResponse response=(HttpServletResponse) servletResponse;
//获取用户请求的路径
String path=request.getServletPath();
if(path.indexOf("/admin")!=-1){
//如果是后台“admin”的请求
//从“/”后边开始截取
path=path.substring(7);
}else {
//如果不是“admin”
//从“/”后边开始截取
path=path.substring(1);
}
/*
.do
login.do DefaultController login
Cake/detail.do CakeController detail
admin/Cake/add.do CakeController add
*/
//通过请求路径 获得类名className。获得方法名methodName。
String className=null;
String methodName=null;
int index=path.indexOf("/");
if (index!=-1){
className="com.imooc.icake.Controller."+path.substring(0,index)+"Controller";
methodName=path.substring(index+1,path.indexOf(".do"));
}else {
className="com.imooc.icake.Controller.DefaultController";
methodName=path.substring(0,path.indexOf(".do"));
}
try {
//通过反射,执行这个方法
System.out.println(className);
Class cla=Class.forName(className);
Object object=cla.newInstance();
Method method=cla.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
method.invoke(object,request,response);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}请问老师这个怎么解决
正在回答 回答被采纳积分+1
1、可以在WEB-INF 前边加上斜杠/

2、路径是:/admin/Catalog/WEB-INF/pages/admin/catalog_list.jsp 是因为,没写/ 是相对路径,转发时,是相对当前服务器的访问路径进程转发的,你应该是去访问的/ admin/Catalog/list. do 把,在当前路径下,由list方法进行转发就是在/ admin/Catalog这个路径的基础上转发到WEB-INF下,所以就出现了/admin/Catalog/WEB-INF/pages/admin/catalog_list.jsp 。
需要在WEB-INF前边加上/ ,也就是从根目录下去找WEB-INF。
页面出现404这个错误 Type Status Report Message /admin/Catalog/WEB-INF/pages/admin/catalog_list.jsp Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
我的CatalogController
package com.imooc.icake.controller;
import com.imooc.icake.biz.CatalogBiz;
import com.imooc.icake.biz.impl.CatalogBizImpl;
import com.imooc.icake.entity.Catalog;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CatalogController {
private CatalogBiz catalogBiz=new CatalogBizImpl();
// /admin/Catalog/list.do
public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Catalog root=catalogBiz.getRoot();
request.setAttribute("root",root);
request.getRequestDispatcher("WEB-INF/pages/admin/catalog_list.jsp").forward(request,response);
}
// /admin/Catalog/toAdd.do
public void toAdd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Catalog root=catalogBiz.getRoot();
request.setAttribute("root",root);
request.getRequestDispatcher("WEB-INF/pages/admin/catalog_add.jsp").forward(request,response);
}
// /admin/Catalog/add.do
public void add(HttpServletRequest request, HttpServletResponse response) throws IOException {
String[] titles=request.getParameterValues("title");
String[] pids=request.getParameterValues("pid");
String[] infos=request.getParameterValues("info");
List<Catalog> list=new ArrayList<Catalog>();
for (int i=0;i<titles.length;i++){
Catalog catalog=new Catalog();
catalog.setTitle(titles[i]);
catalog.setPid(Integer.parseInt(pids[i]));
catalog.setInfo(infos[i]);
list.add(catalog);
}
catalogBiz.add(list);
response.sendRedirect("list.do");
}
// /admin/Catalog/remove.do
public void remove(HttpServletRequest request, HttpServletResponse response) throws IOException {
int id=Integer.parseInt(request.getParameter("id"));
catalogBiz.remove(id);
response.sendRedirect("list.do");
}
}为什么会加载到这个页面/admin/Catalog/WEB-INF/pages/admin/catalog_list.jsp
而不是/admin/WEB-INF/pages/admin/catalog_list.jsp这里
同学你好。报错信息显示没有找到CatelogController这个类:

同学可以检查下自己是否有com.imooc.icake.Controller这个包。这个包下是否有CatelogController这个类呢?注意大小写也要一致的。
如果有,那么可能是缓存问题了。可以清除缓存再试:
1)清除idea缓存:

2)清除浏览器缓存,windows系统使用快捷键“Ctrl+Shift+Delete”即可。
如果不是windows系统,Chrome浏览器地址栏中访问chrome://settings/clearBrowserData 点击确定即可。
3)重新编译项目:

然后重启Tomcat试一下~
祝学习愉快~
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星