关于错误的那点事——惨不忍睹的错误

本文详细阐述了SpringMVC框架中页面跳转、整合MyBatis、配置文件加载等问题的解决方法,同时讨论了图片上传、错误处理、依赖缺失、数据库操作等常见技术细节。通过实例分析,旨在帮助开发者有效解决开发过程中可能遇到的技术难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springMVC跳转问题

这几天用springMVC,配置好了,就是不能跳到WEB-INF下面的jsp,回去仔细看了配置文件发现。

  • 之前:
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
  • 改正之后:
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        //此处决定你到底跳转的路径
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

被自己蠢哭了有木有。


页面跳转500页面问题

  • 访问jsp有的可以访问,有的直接跳转500,感觉路径没有一点问题,由于这几天刚整合了shiro,还以为是shiro的问题,搞得我把shiro官方文档看了一遍,问题没解决,shiro倒是会用了,真的是醉了,无意间发现了问题,是因为页面jsp引入的js或者css的问题,${contextPath}写成了#{contextPath},导致页面出错,才跳转的500,由于web.xml里面配置了500错误跳转的页面
  • 之前:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  <error-page>
        <error-code>404</error-code>
        <location>/404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.jsp</location>
    </error-page>
 </web-app>
  • 修改之后:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             version="3.0">
      <error-page>
            <error-code>404</error-code>
            <location>/404.jsp</location>
        </error-page>
           <!-- 
           <error-page>
            <error-code>500</error-code>
            <location>/500.jsp</location>
        </error-page>
        -->
     </web-app>

先注释掉500的错误跳转页面,正式环境上在打开注释


SpringMVC与mybatis整合问题

  • NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy

缺少: ‘org.springframework:spring-jdbc:4.2.4.RELEASE’,


  • java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException

缺少:’org.springframework:spring-tx:4.2.4.RELEASE’,(就是spring-transaction)


mybatis 扫描mapper.xml文件问题

  • 一直提示无法找到mapper文件夹中的xml文件,can’t create bean …
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
         <!--自动扫描mapping.xml文件-->
        <property name="mapperLocations" value="classpath:com/ttc/dao/mapper/*.xml"></property>
    </bean>

改正之后:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
         <!--自动扫描mapping.xml文件-->
         <--就因为classpath后面要跟一个*-->
        <property name="mapperLocations" value="classpath*:com/ttc/dao/mapper/*.xml"></property>
    </bean>

mybatis下面在包下面的xml文件不被编译

这里写图片描述

上传图片自定义样式后无法上传图片问题

 <input class="real_file" type="file" name="upload" accept="image/*" capture="camera" onchange="uploadPicture('imgCUpload')" style="display: none" id="imgC"/>
<div class="upload" onclick="triggerInputClick('imgC')">
        <img id="up_img3" src="${contextPath}/images/epaylink/upload_ico.png"/>
</div>

js文件:

/**
 * 选择图片后直接上传图片
 */
function uploadPicture(imgId) {
    $("#" + imgId).click();
}

上传图片的οnchange=”uploadPicture(‘imgUpload’)”方法要写在html页面的表单域里面,不然没有效果。

在idea中如果你遇到HttpServletRequest无法导入的情况

 @RequestMapping(value="/imageUpload",method = RequestMethod.POST)
    public void springUpload(HttpServletRequest request) {
        //  TODO
    }

这种情况是因为你没有导入Applycation Servlet Library,将其添加到项目中就可以了

这里写图片描述
这里写图片描述

加载properties配置文件时遇到的问题

修改前:

prop = new Properties();
            InputStream is = null;
            try {
                ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
               is = classLoader.getResourceAsStream("resources/" + fileName);
                if (is != null) {
                    prop.load(is);
                }

修改后:

            prop = new Properties();
            InputStream is = null;
            try {
                ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
                is = classLoader.getResourceAsStream(fileName);
                if (is != null) {
                    prop.load(is);
                }

就因为我在前面加了一个/resources,结果就无法加载。

使用idea编译项目的时候遇到错误: 程序包javax.servlet不存在

原因是没有servlet-api这个包,我使用的是gradle。

dependencies {
    compile(
            'javax.servlet:javax.servlet-api:3.1.0'

    )
}

在build.gradle中加入这句话就可以了。

使用mybatis-generator生成的mappper, 向数据库插入数据时,始终无法插入,并控制台报错。

java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ttc.dao.PermissionMapper.BaseResultMap

百思不得其解,因为我用的是mybatis-generator,使用代码对比工具,发现生成的PetMapper.xml多了几百行!!!

原来是我在运行时没有把之前已经生成的userMapper.xml删除掉,再次生成代码时,又附加了上去!所以在运行代码生成之前,要把以前已经生成的xml文件清掉,以妨出错。

org.apache.ibatis.binding.BindingException: Invalid bound statement (com.*.*.UserMapper)

今天使用mybatis-generator生成的mapper不满足要求,增加了一个方法然后就一直报绑定错误的问题

 @Resource
    ArticleTypeMapper articleTypeMapper;

还一直有一行的波浪线说是无法注入,我就奇怪了重头检查了一边没有发现问题,最后我就去build(编译后的文件夹)去看了一下,里面的mapper.xml竟然没有更新。还是gradle没有用熟啊,又手动去刷新了一下,运行通过。

数据库插入中文显示????

id用户名文章
1???BLOG
2benny???BLOG

mysql的my.ini文件已经都改成utf8了,最后找到问题是因为:

jdbc.url=jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf8

Spring的注入问题

  • 正常情况下:
    @Autowired
    @Qualifier(value = "ECPSysArgsServiceImpl")
    private ECPISysArgsService sysArgsServiceImpl;

现在想要写一个公用的类,于是就要写成static了,如果直接
@Autowired
@Qualifier(value = “ECPSysArgsServiceImpl”)
private static ECPISysArgsService sysArgsServiceImpl;

这样是无法注入的,所以要采用构造器注入。

 private static ECPISysArgsService sysArgsServiceImpl;

    @Autowired
    public ArgsUtil(ECPISysArgsService sysArgsServiceImpl){
        ArgsUtil.sysArgsServiceImpl = sysArgsServiceImpl;
    }

完整代码如下:

@Service
@Lazy(false)
public class ArgsUtil {

    private static ECPISysArgsService sysArgsServiceImpl;

    @Autowired
    public ArgsUtil(ECPISysArgsService sysArgsServiceImpl){
        ArgsUtil.sysArgsServiceImpl = sysArgsServiceImpl;
    }

    public static String ADDR_ARGS = "";

    public static String DEFAULT_ADDR = "http://192.168.5.77:8080";

    /**
     * @return java.lang.String
     * @author benny
     * @date 2016/4/22
     * @method getArgs
     * @version V1.0.0
     * @description 获取系统管网地址 如果从缓存中读取不到直接返回管网地址
     */
    public static String getArgs() {
        try {
            ADDR_ARGS = sysArgsServiceImpl.getSysMap(Constants.SYS_IHUI_ADDR).getResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (StringUtils.isBlank(ADDR_ARGS)) return DEFAULT_ADDR;
        return ADDR_ARGS;
    }

}

写完发现还是注入失败,晕死,原来是忘记在类上加上注解@SERVICE

MybatisGenerator生成的代码提示*已经存在

Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [E:\hellofdssd\ttc-blog\build\classes\artifacts\ttc-core\exploded\ttc-core-1.0-SNAPSHOT.war\WEB-INF\classes\mapper\ArticleMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ttc.dao.ArticleMapper.BaseResultMap
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:468)
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:343)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 108 more

原因很明显,也很尴尬,生成的代码我没有删除直接又执行了一次,于是就在上一次的代码之上,又生成了一次,所以报代码重复问题

BootstrapUtil…..错误

java.lang.IllegalStateException: Could not load CacheAwareContextLoaderDelegate [class org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]

    at org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:101)
    at org.springframework.test.context.BootstrapUtils.createBootstrapContext(BootstrapUtils.java:70)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:152)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:143)
    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:422)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:98)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;
    at org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:98)
    ... 19 more

原因是在jar包中,发现多了一个spring2.5.3的jar包,导致jar包冲突,源码报错,beanutil有两个一个4.2.4的一个4.2.5的所以提示错误。


HTTP Status 500 - Servlet.init() for servlet mvc-dispatcher threw exception

Servlet.init() for servlet MyDispatcherServlet threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Servlet.init() for servlet MyDispatcherServlet threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    java.lang.Thread.run(Thread.java:722)


root cause 

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\ItDevelop\Tomcat7\webapps\Spring-MVC-0.0.1-SNAPSHOT\WEB-INF\classes\controller\MyController.class]; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
    org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:281)
    org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
    org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentS

原因我已经不想多说什么了,因为是自己新建的WEB-INF文件夹,但是他是一个黄色的空文件夹,也就是说他不是 资源文件夹
右键WEB-INF,make directory AS RESOURCE DIRECTORY

I guess the problem is with the notices-servlet.xml file. Check the "WEB-INF" folder for the ServletContext resource. Try again running the project after putting the notices-servlet.xml in the "WEB-INF" folder. Hope that will do!

利用ajax提交表单被浏览器拦截修改问题

var subSucc = false;
 $.ajax({
                    url       : basePath + url,
                    type      : "post",
                    dataType  : "json",
                    async     : false,  //此处是重点  不然异步执行会先执行下面的表单提交

                    success   : function (data) {
                            subSucc = true;
                    },
                    error     : function () {
                        submitMessage("网络异常请稍后再试", "error");
                    },
                    beforeSend: function () {
                    }
                });
                if (subSucc) {
                    $("#goPay").submit();
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值