老师,求救~

老师,求救~

老师啊,我的项目运行打开网页是白茫茫的一片啊,啥也没有啊~

http://img1.sycdn.imooc.com//climg/5e21bd3a0961767e04020031.jpg访问的地址是想要的

核心控制器:

public class CoreController extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String path = request.getServletPath(); //获取用户访问路径
        //  /admin/Book/list.do
        //  /admin/Category/list.do
        //  /index.do
        if (path.indexOf("/admin/") != -1) {    //后台页面请求,去掉前面的/admin/
            path = path.substring(7);
        } else {    //前台页面请求,去掉前面的/
            path = path.substring(1);
        }
        int index = path.indexOf("/");
        String className = null;
        String methodName = null;
        if (index != -1) {  //后台页面请求
            className = "com.imooc.library.controller." + path.substring(0, index) + "Controller";
            methodName = path.substring(index + 1, path.indexOf(".do"));
        } else {    //前台页面请求
            className = "com.imooc.library.controller.DefaultController";
            methodName = path.substring(0, path.indexOf(".do"));
        }
        //通过反射执行相应的控制器和方法:
        try {
            Class<?> aClass = Class.forName(className);
            Object o = aClass.newInstance();
            Method method = aClass.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            method.setAccessible(true);
            method.invoke(o, 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();
        }
    }
}

在web.xml中也说明了:http://img1.sycdn.imooc.com//climg/5e21be3509078a4b06410202.jpg

分类控制器代码:

http://img1.sycdn.imooc.com//climg/5e21be8909c9c2eb08910198.jpg

目录结构:http://img1.sycdn.imooc.com//climg/5e21bee1090a6ecd03220405.jpg

依赖:http://img1.sycdn.imooc.com//climg/5e21bf2b09250dd803150332.jpg

设置相关:http://img1.sycdn.imooc.com//climg/5e21c0130951638d10670371.jpg

http://img1.sycdn.imooc.com//climg/5e21bfdb0970a33909500696.jpg

http://img1.sycdn.imooc.com//climg/5e21bf7d0982cf9a09450694.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

9回答

同学你好!

1.war模式:将web工程以war包的形式上传到服务器;

2. war exploed模式:将web工程以当前文件夹的位置关系上传到服务器。

 通俗地说:

war模式先打成war包,然后再发布到Tomcat的ROOT下。

war exploded模式只编译生成target,然后把当前的target文件夹的位置关系上传到服务器,没有打包到tomcat的ROOT下。

因此在开发阶段使用第二个就可以

3. 你使用的Web exploded ,老师在开发中没有见过有人用这个呢。你可以将Web exploded删掉,选中然后点击上面的减号,然后应用

http://img1.sycdn.imooc.com//climg/5e23ef0c09e552e803580169.jpg

接下里修改一下Artifacts

http://img1.sycdn.imooc.com//climg/5e23eed009f62ae114581002.jpg

如果有多个在选择时会进行提示,你选择war exploded,就可以

http://img1.sycdn.imooc.com//climg/5e23ef40090154cb04920522.jpg

祝学习愉快~


  • qq_粽翎_0 提问者 #1
    老师,我按照你的操作换回来了,可是之前的问题还在。。。(看我回答区)
    2020-01-19 17:51:45
好帮手慕柯南 2020-01-19 18:38:47

同学你好!

在maven中已经引入了相应的servler-api的jar,看你的项目中又引入了tomcat中的jar

http://img1.sycdn.imooc.com//climg/5e24316609b9bca502420270.jpg

可能是jar包的版本冲突了,建议你删除一下tomcat下的jar测试一下

http://img1.sycdn.imooc.com//climg/5e2431930911f18d19200983.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 qq_粽翎_0 #1
    删除了,还是之前那样。 看到其中两条输出信息是这样:19-Jan-2020 19:39:23.299 信息 [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. 19-Jan-2020 19:39:14.253 警告 [RMI TCP Connection(2)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]. Default version will be used.
    2020-01-19 19:50:20
好帮手慕柯南 2020-01-19 18:03:48

同学,你启动之后,有访问地址吗?

你的意思是你在浏览器中输入地址进行访问,并没有进入核心控制器中吗?

如果是:你检查一下那你的target目录下的classes中是否有核心控制器呢。比如:

http://img1.sycdn.imooc.com//climg/5e24299609f138e103920345.jpg

如果没有建议你将target删除。重新运行一下。

如果我的回答解决了你的 疑惑,请采纳,祝学习愉快~

  • 提问者 qq_粽翎_0 #1
    老师,我target目录下项目中所有的class文件都存在的,运行项目默认进入一个地址(一开始提问的时我也贴了图),是想要的,不过debug那里就是空的,而且控制台没有输出什么异常信息。然后我又手动换了个地址,还是这样,什么都没变化
    2020-01-19 18:08:52
提问者 qq_粽翎_0 2020-01-19 17:55:37

老师,还是之前的问题,运行项目打开的网页是白屏,idea控制台没有输出什么异常信息(正常部署项目的信息,也提示部署成功了)。之前老师叫我debug看看,我debug运行是这样的:

http://img1.sycdn.imooc.com//climg/5e242751099d9d2a13450708.jpg

debug这里啥都没有...(是通过debug模式运行的),根本调试不了,求救啊~

提问者 qq_粽翎_0 2020-01-19 10:44:04

老师,你截图那里war和war exploded 和Web exploded 是什么意思?什么时候该用哪个?

http://img1.sycdn.imooc.com//climg/5e23c1e00906f1b613190250.jpg

我之前有Web exploded,可能都是用它来运行项目所以不行,现在我把它删掉了,运行时还是默认用这个......  是用war exploded才对吗?怎么用war exploded来运行项目呀......

好帮手慕柯南 2020-01-19 09:50:17

同学你好!

如果你的项目只有在运行时报错了,可能是你的jar在打包时,没有添加进去,你手动添加一下:

File ->Project Structure

在右侧选中项目右键,选中Put into Output Root。然后重新运行项目测试一下

http://img1.sycdn.imooc.com//climg/5e23b5a409deb41f19200983.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 qq_粽翎_0 #1
    老师看我回答区
    2020-01-19 10:40:38
提问者 qq_粽翎_0 2020-01-18 21:03:12
18-Jan-2020 20:55:05.065 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class [com.imooc.library.filter.CategoryListener]
 java.lang.NoClassDefFoundError: org/apache/ibatis/session/SqlSessionFactoryBuilder
	at com.imooc.library.utils.DaoFactory.<init>(DaoFactory.java:21)
	at com.imooc.library.utils.DaoFactory.getInstance(DaoFactory.java:29)
	at com.imooc.library.service.Impl.CategoryServiceImpl.<init>(CategoryServiceImpl.java:17)
	at com.imooc.library.filter.CategoryListener.<init>(CategoryListener.java:17)
	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 org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:120)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4667)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1739)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
	at sun.rmi.transport.Transport$1.run(Transport.java:200)
	at sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.ibatis.session.SqlSessionFactoryBuilder
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
	... 56 more

18-Jan-2020 20:55:05.065 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Skipped installing application listeners due to previous error(s)

什么都没动,昨天还能自动打开浏览器(不过是白屏),今天页面都不能打开了。daofactory:

package com.imooc.library.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;


/**
 * @author LZ
 * @date 2020/1/17 11:02:36
 * @description
 */
public class DaoFactory {
    private static DaoFactory daoFactory;
    private static SqlSessionFactory sqlSessionFactory;

    private DaoFactory(){
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("/mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static DaoFactory getInstance() {
        if (daoFactory == null) {
            daoFactory = new DaoFactory();
        }
        return daoFactory;
    }

    public <T> T getDao(Class<T> aClass) {
        return sqlSessionFactory.openSession(true).getMapper(aClass);
    }
}

依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.imooc</groupId>
    <artifactId>library</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.4</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
    </dependencies>

</project>


好帮手慕柯南 2020-01-18 11:00:00

同学你好!

老师在本地测试你的核心控制器是没有问题的。

建议你在核心控制器以及Controller中打断点看一下能否进入后台。

如果不能,可能是你的web模块配置有误。建议你检查一下:

上面的地址是web.xml的路径

下面的地址是到web目录就可以

http://img1.sycdn.imooc.com//climg/5e22748509c85df712110579.jpg

祝学习愉快~

  • 提问者 qq_粽翎_0 #1
    老师,有错误....看看我的回答区
    2020-01-18 20:58:24
提问者 qq_粽翎_0 2020-01-17 22:15:03

对了,idea控制台也没有打印什么错误信息,正常的启动信息。网页的控制台也没有什么信息,白茫茫的一片

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师