帆的博客

扬帆起航

在做项目的时候出现一个错误,看了半天没看出来是什么问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root cause
java.util.NoSuchElementException
java.util.ArrayList$Itr.next(ArrayList.java:834)
org.apache.jasper.compiler.Validator$ValidateVisitor.getJspAttribute(Validator.java:1385)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:772)
org.apache.jasper.compiler.Node$UninterpretedTag.accept(Node.java:1251)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:779)
org.apache.jasper.compiler.Node$UninterpretedTag.accept(Node.java:1251)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:529)
org.apache.jasper.compiler.Node$JspRoot.accept(Node.java:564)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2435)
org.apache.jasper.compiler.Node$Root.accept(Node.java:474)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1841)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

找了半天才发现是tomcat的一个bug,换了一个tomcat版本就好了
导致这个错误的原因如下

1
<jsp:param name="test" value="" />

如果是value是空值,在某些tomcat版本下就会出现这个情况,如果你遇见了,不妨换个版本试试。

总结

本文系统讲解了相关技术要点。通过学习掌握核心概念和实践方法,提升技术能力。

关键要点

  • 理解核心技术原理
  • 掌握实际应用方法
  • 学习最佳实践和注意事项

实践建议

  1. 结合实际项目练习
  2. 深入研究官方文档
  3. 持续学习和实践

<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。

这句话我在很多帖子都看到过,我自己的项目本身使用的Spring MVC 3.2,实际上在3.1之后,<mvc:annotation-driven />注册的类发生了变化

Spring Framework 3.1 introduces a new set of support classes for processing requests with annotated controllers:

RequestMappingHandlerMapping
RequestMappingHandlerAdapter
ExceptionHandlerExceptionResolver
These classes are a replacement for the existing:

DefaultAnnotationHandlerMapping
AnnotationMethodHandlerAdapter
AnnotationMethodHandlerExceptionResolver

阅读全文 »

Nexus篇

在Centos上安装

如果机器上是JDK1.6的话,nexus-2.5.1是最后一个支持JDK1.6的版本。

下载地址:http://www.sonatype.org/nexus/archived

我这里使用FTP工具上传到服务器上。执行命令的时候如果遇到没有权限的地方用chmod改变文件权限。

设置为系统自启动服务(使用root用户)

1
2
cd /etc/init.d/
cp /usr/local/jdk/nexus-2.5.1-01/bin/jsw/linux-x86-64/nexus nexus

编辑/etc/init.d/nexus文件,添加以下变量定义:

1
2
3
NEXUS_HOME=/usr/local/jdk/nexus-2.5.1-01
PLATFORM=linux-x86-64
PLATFORM_DIR="${NEXUS_HOME}/bin/jsw/${PLATFORM}"
阅读全文 »

官方放出了mybatis和memcached的整合包,先附上官方文档地址
http://mybatis.github.io/memcached-cache/
文档很简洁,事实证明使用起来也很简单
memcached的安装我这里就不再讲了,网上很容易找到
在项目中引入

1
2
3
4
5
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-memcached</artifactId>
<version>1.0.0</version>
</dependency>
阅读全文 »

要使用yum 安装mysql,要使用mysql的yum仓库,先从官网下载适合你系统的仓库
http://dev.mysql.com/downloads/repo/yum/
centos 6.5 对应的是mysql-community-release-el6-5.noarch.rpm
然后安装一下这个仓库列表

1
sudo yum localinstall mysql-community-release-el6-5.noarch.rpm 

执行这个命令后就能看到可安装的mysql

1
yum repolist enabled | grep "mysql.*-community.*"
阅读全文 »

我们在用@ResponseBody返回实体对象可以用spring mvc自动帮我们转化成json串
但是当实体中包含了枚举类型的属性的时候怎么办,我这里使用的是fastjson,他默认是转换成了字符串。
根据我上一篇博文的解决方案,我们这里自定义一个FastJsonHttpMessageConverter

阅读全文 »

我的实体类里面有一个属性是枚举类型的,但是我在转换的时候我不希望取它的name,而是它的索引值0,1,2,3,搜索一番后发现这个回答

fastjson enum 枚举 反序列化
为了方便大家查看,我把内容贴过来
看fastjson源码,SerializeWriter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void writeEnum( Enum < ?>value, char c )
{
if ( value == null )
{
writeNull();  
write( ',' );  
return;  
}


if ( isEnabled( SerializerFeature.WriteEnumUsingToString ) )
{
if ( isEnabled( SerializerFeature.UseSingleQuotes ) )
{
write( '\'' );  
write( value.name() );  
write( '\'' );  
write( c );
} else {
write( '\"' );  
write( value.name() );  
write( '\"' );  
write( c );  
}  
return;  
}

writeIntAndChar( value.ordinal(), c );  
}
阅读全文 »
0%