zoukankan      html  css  js  c++  java
  • 2016年工作中遇到的问题11-20

    11.SpringMVC的PathVariable。
    @PathVariable("id") Integer id;
    @RequestParam Integer id;


    使用了“路径变量”,同时要求它不为空,就使用了
    @RequestParam @PathVariable("id") Integer id;
    访问 /1001 ,结果提示id总是找不到。


    使用了@PathVariable,不应该再同时使用@RequestParam。


    12.阿里云的OSS删除图片。


    删除之前,Chrome浏览器能正常下载图片。删除之后,Chrome还可以继续下载。


    去阿里云控制台确认,已经删除了。


    用QQ浏览器打开图片,被拒绝。


    这说明图片已经删除成功了。


    Chrome可以继续下载,很可能是“浏览器缓存”。


    13.JSTL的if表达式。
    sendId在Java中是String类型,数据库中是varchar。
    这种写法,在Jetty下运行从来没有报错,在Tomcat下,突然就报错了,之前没问题。
    <td><c:if test="${message.sendId==-1}">系统</c:if>


    严谨的写法,字符串比较用''括起来。
    <td><c:if test="${message.sendId=='-1'}">系统</c:if><c:if test="${message.sendId!='-1'}">${message.sendMember.mobile}</c:if></td>


    14.maven如何将项目引用的所有jar包复制到lib文件夹内。
    Maven的非web项目在执行时需要引用很多jar包,这时候通常的做法是将这些jar包统一放到lib目录中,maven的dependency插件可以帮我们做这件事情。


    我们需要在pom文件的build节点的plugins节点内添加一个plugin,plugin内容如下:
    <build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-jar-plugin</artifactId>
    				<configuration>
    					<archive>
    						<manifest>
    							<mainClass>MainClass</mainClass>
    							<addClasspath>true</addClasspath>
    							<classpathPrefix>lib/</classpathPrefix>
    						</manifest>
    						<manifestEntries>
    							<Class-Path>.</Class-Path>
    						</manifestEntries>
    					</archive>
    				</configuration>
    			</plugin>
    			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>E:MavenRepository.0.1-SNAPSHOTlib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    	</build>




    参考资料:http://outofmemory.cn/maven/FAQ/how-to-copy-dependency-to-lib-folder


    15.Redis的几个问题。
    Redis缓存对象,需要序列化。
    public class OssItem implements Serializable。
    如果没有实现Serializable,会报错。




    public class OssItem extends BaseOssItem implements Serializable。
    放到缓存前,list集合OssItem元素的属性都有值,属性都是从父类BaseOssItem继承来的。
    但是,当从Redis取出的时候,list集合有值,但每个元素的属性都是空的。


    后来,把父类BaseOssItem的属性,都手动定义放到OssItem下就可以了。
    public class OssItem  implements Serializable{
       private String name;
       ...



    16.Redis缓存集合类型。
    2个项目,都使用了SpringDataRedis,但是配置方式不一样。
    org.springframework.data.redis.core.StringRedisTemplate


    其中1个,可以直接存放list集合。而另外一个却会报错,只能把集合序列化,再存储。
    public void add(String key,List<ResourceMatchContent> list){
    		String json = JSONObject.toJSONString(list);
    		logger.info("save ResourceMatch ,json=" + json+",key="+key);
    		defaultCache.add(key, json, CATCHE_TIME);
    	}
    	


    序列化方式有很多种,这个地方用的是“json序列化”。


    17.Nginx配置负债均衡。
    之前,只亲自配置过动静分离,域名映射。
    最近,看了下项目中和网上的负载均衡配置,挺简单的。
    upstream jieli.com {
             server 127.0.0.1:8080;
              #server 192.168.8.203:8080;
        }
    	server{
              listen 80;
              server_name erp.zh-jieli.com;
              location / {
                  index index; #默认主页为 /index
                  #proxy_pass http://jieli;
              }
    	}


     
    18.Solr数据不同步。
      Solr4中,用了SolrCloud分布式服务,出现了数据不一致的情况,原因未知。
      改成了Solr5,没有这个问题。

    19.java.lang.NullPointerException错误
    spring运行的时候出现了:


    java.lang.NullPointerException
        at org.springframework.core.SerializableTypeWrapper$TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239)
        at org.springframework.core.$Proxy5.hashCode(Unknown Source)
    问题原因:spring的jar包冲突


    自己的项目,dubbo中有个spring2.5,又配置了spring4.x,调整下顺序就好了。

    参考资料:http://zhidao.baidu.com/link?url=KyfXakvRF7skwyJ8MLU_8x3qNThYbx2r478bi1ynQ1xrni6cWyki7PeQ_LkR3eJldPvRd_EbFsDrN3dGCbbP-RkjE5m5tLd00r5vaNTp_BO


    20.SpringJUnit4ClassRunner.runLeaf方法找不到。
    java.lang.NoSuchMethodError: org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runLeaf(Lorg/junit/runners/model/Statement;Lorg/junit/runner/Description;Lorg/junit/runner/notification/RunNotifier;)V
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:217)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)


    问题原因:
    Spring版本
     spring用3.x 不报错。<spring.version>3.2.3.RELEASE</spring.version>
     
     spring用4.x报错。<spring.version>4.1.4.RELEASE</spring.version>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    </dependency>

    最终结果:项目中有很多地方pom.xml都配置junit,各种版本。
    最后,只留一个4.10的配置,就好了。

    真是坑,花了几个小时才搞定。
  • 相关阅读:
    javaweb学习总结(二十一)——JavaWeb的两种开发模式
    javaweb学习总结(二十)——JavaBean总结
    javaweb学习总结(十九)——JSP标签
    javaweb学习总结(十八)——JSP属性范围
    JavaWeb学习总结(十七)——JSP中的九个内置对象
    javaweb学习总结(十六)——JSP指令
    javaweb学习总结(十五)——JSP基础语法
    javaweb学习总结(十四)——JSP原理
    JavaWeb学习总结(十三)——使用Session防止表单重复提交
    JavaWeb学习总结(十二)——Session
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462443.html
Copyright © 2011-2022 走看看