一、spring mvc 404错误
输入地址,浏览器只显示404,并无其它多余提示,在Controller类里下断点发现并没有执行。纠结了一天后才百度到是因为servlet.xml里没有配置<mvc:annotation-driven />。
<mvc:annotation-driven />是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。没有这两个bean@Controller、@RequestMapping
、@RequestBody
/ResponseBody等spring mvc
注解无法工作。
与<mvc:annotation-driven />类似的是<context:annotation-config>,它使通用注解得以工作,如:
@Required
, @Autowired
, @PostConstruct。
注解问题解决后浏览器依然报404错误,不过有了提示,路径不对找不到访问资源。再次检查servlet.xml配置,发现是文件映射路径解析配置错误。
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="classpath/view/jsp/"
p:suffix=".jsp" />
原因是classpath在p:prefix里不起作用,会被直接解析成“classpath”字符串。映射路径解析规则 :假设Controller类里returned login, 拼接prefix、suffix值形成classpath/view/jsp/login.jsp。服务器里没有classpath/view/jsp这个目录,页面发布在/WEB-INF/classes/view/jsp/目录下,将classpath/view/jsp/改为/WEB-INF/classes/view/jsp/,成功反问到页面。
二、Unable to compile class for JSP…… The method getJspApplicationContext(ServletContext) is undefined for the type JspFacto错误
404错误解决后可以访问到jsp页面,但无法正常显示,报500错误附带提示 Unable to compile class for JSP…… The method getJspApplicationContext(ServletContext)
is undefined for the type JspFacto错误。 原因是lib包中存在两个servlet-api包引起冲突,注释了pom.xml里的jsp依赖后低版本的servlet-api包消失,页面能够正常访问。
三、spring集成Junit单元测试问题
低版本Junit jar包不兼容spring,建议用4.11以上版本。起先用4.1版本的junit包,对service层代码进行单元测试的时候程序报错,后来换成4.8版本还是报错,最后换成4.11版本才成功运行。
问题:
关于Command Object。我并没有配置Command Object,Controller里也没有写任何相关的代码,或许有点关系的是我把Command类和Controller类一块放在web包下,servlet.xml配置了这个包的扫描,且表单input标签name属性值和Command类属性值一致。运行程序时居然能够自动将表单提交数据(userName和password)封装到Command类里,这真实太神奇啦!这个问题待进一步学习过程中解决。
来源:oschina
链接:https://my.oschina.net/u/1476426/blog/485483