输入地址,浏览器只显示404,并没有其它多余提示,在Controller类里下断点发现并无执行。纠结了一天后才百度到是由于servlet.xml里没有配置<mvc:annotation-driven />。html
<mvc:annotation-driven />是一种简写形式,彻底能够手动配置替代这种简写形式,简写形式可让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。没有这两个bean@Controller、@RequestMapping
、@RequestBody
/ResponseBody等spring mvc
注解没法工做。web
与<mvc:annotation-driven />相似的是<context:annotation-config>,它使通用注解得以工做,如:
spring@Required
, @Autowired
, @PostConstruct。
api 注解问题解决后浏览器依然报404错误,不过有了提示,路径不对找不到访问资源。再次检查servlet.xml配置,发现是文件映射路径解析配置错误。
<bean 浏览器
class="org.springframework.web.servlet.view.InternalResourceViewResolver"服务器
p:viewClass="org.springframework.web.servlet.view.JstlView"mvc
p:prefix="classpath/view/jsp/" app
p:suffix=".jsp" />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/,成功反问到页面。单元测试
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包消失,页面可以正常访问。
3、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类里,这真实太神奇啦!这个问题待进一步学习过程当中解决。