注:以下这些是编程过程中遇到的一些问题。有的小到只要到网上一搜或者在官方文档里面一翻就能找到答案,有的却是自己花了一点时间去实验,最后才得到的一点结果。不过现在我把这些小的或者大的都放到这里。主要是为了自己能方便的记忆。那些很容易的记住的就当做知识点,那些实验了的结论就当做备忘。
第一期
Q1:<mvc:annotation-driven>是什么?
A1:相当于注册了DefaultAnnotationHandlerMapping(实现类型级别的注解)和AnnotationMethodHandlerAdapter(实现方法级别的注解)
Q2:<context:component-scan>
A2:用来包扫描。这个还有其他的意义,暂时不写,因为还不是很懂
Q3:<context:annotation-cofig>
A3:表示注册了一下bean:
AutoWireAnnotaitionBeanPostProcessor --@Autowired.
CommonAnnotationBeanPostProcessor --@Resource @PostConstruct @PreDestroy
PersisternceAnnotationBeanPostProcessor --@PersistenceContext
RequireAnnotationBeanPostProcessor --@Required
如果使用了<context:component-scan>则 这个可以不写。
Q4:<context:component-scan> <mvc:annotation-driven> <context:annotation-cofig>三者之间怎么搭配?
A4:如果使用了<context:component-scan>则<context:annoation-config>可以省略。那么就只要考虑前面两者。试了一下。全部放在[servlet-name]-servlet.xml中或者applicationContext.xml中是可以的。只是。如果<context-component-scan>放在applicationContext.xml,而将<mvc:annotaiton-driven>放到[servlet-name]-servlet.xml中,则不行。
T:两者放到一起可以理解。因为[servlet-name]-servlet.xml是applicationContext.xml的子WebApplicationContext。但是分开为什么不行。这个还要思考。
Q5:在类上加@RequestMapping和在方法上加@RequestMapping有何区别
A5:首先是,对应的类不同。在类上,处理的是DefaultAnnotationHandlerMapping,在方法上是AnnotationMethodHandlerAdapter。这个在Q1上有说明那个。其次:如果在类上有这样的一个请求@RequestMapping("/simple")。 在方法上有这样的几个请求@RequestMapping("/index.do"),@RequestMapping("/login.do")。则访问方法上的请求时,simple/index或者simple/login。即:都以类上的请求作为根(这个也不能说是根)
Q6:如果项目中是这样的,该怎么访问路径:
WebContext
----users
--admin
--images
--js
--WEB-INF
--admin
--index.jsp
--adduser.jsp
A:在Controller中。return adduser。访问根目录。admin/aduser,访问admin/adduser。admin/WEB-INF/adduser。就是访问WEB-INF/admin/adduser.jsp
前提:org.springframework.web.servlet.view.InternalResourceViewResovler的prefix的属性为"/"
Q7:在使用spring的时候,通过getBean取到的bean不匹配、
A7:应该返回接口,IService s = ctx.getBean("name",IService.class)。而不是getBean("name",ServiceImpl)。当然,这是在有接口的情况下。
Q8:在@RequestParam("param")的时候,如果没有传递参数怎么办?
A8:可以使用他的requried=false(这个是好久之前遇到的问题了)
Q9:在搭建Maven web项目的时候,为什么不能出来web app的骨架(就是有那个webapp)的那个
A9:不选择骨架(quick-start)都不需要。点击simple,将打包方式改成war。(这是用eclipse的Maven插件来做的)
Q10:自定义异常时,在其他程序中throw new MyException,却还是要提示需要使用try catch
A10:自定义异常extends RunTimeException 而不是 Exception。
Q11:出现版本冲突,但经过排查发现并没有冲突发生
A11:使用Maven的 clean install命令。
Q12:前台使用UTF-8。后台spring mvc @ResponseBody返回数据是乱码?
A12:1:提交方式用post 。其次,@ResponseBody默认编码是ISO-8859-1。在[servlet-name]-serlet.xml中配置bean:AnnotationMethodHandlerMapping。里面有个属性可以覆盖。网上有例子。
Q13:用svn删除某个文件夹后,有时候提交出现异常。
A13:在svn确定要删除某个文件夹的话,删掉后马上提交。如果忘记提交,则先revover(恢复),然后删除+提交
Q14:Struts blank包下的例子运行不了,报找不到路径
A14:将struts.xml example.xml放到src下。而不是之前放的地方。因为,你如果把他放到eclipse中的话,class下面的会重新编译。
Q15:使用淘宝,怎样取消登录短信验证
A15:我的淘宝---操作保护设置--设置--操作保护--登录---按照提示
Q16:路径问题:比如在admin/login.jsp下发起请求<action = "login.do"。则页面跳转路径是:http://localhost:8080/myApp/admin/login.do。而我需要的是跳转是 /myApp/login.do。(即从跟路径开始)
A16:在action中这样写:<action ="./login.do" 当然,也可以获取项目名。其中要表达的是跟路径为./
Q17:不能运行struts2-showcase
A17:因为我复制到eclipse后,先构建,然后清理,web-app下的classes清空了,所以不行。必须要包那个class中的文件放到src目录下。这个和Q14类似。
Q18:spring 的mapping
A18: href="<c:url value='/simple.'"> ---- myApp/simple
href="/simple" 则不行。应该是./simple (也是路径问题)
Q19:在powerdesinger的类图中,继承和实现分别选哪个个?
A19:在powerdesinger的类图中,继承和实现都用Generalization。软件能自动识别
Q20:idref 和ref区别在哪里?
A20:idref是引用另外一个bean的bean name。而ref则是直接引用一个bean
Q21:@Respository,@Component我们一般在需要自动扫描的类上写上这样的注解,但是在接口上要写吗?
A21:类似必须要写(如果不使用component-scan则另当别论)。接口上则不必要写。
T:因为接口是无法实例化的,所以写了也没用。因为写这个相当于初始化的时候实例化标注了该注解的类。但是接口是无法实例化的。所以,不需要写。
Q22:@Controller @Respoty @Service @Component 与Autowired
A22:前面的那些主要是用spring mvc 和component-scan中。后者主要是IOC中(当然,这个说法并不准确。只是让我区分)
Q23:使用mysql练习spring 的事务,发现控制台中,数据已经回滚了, Rolling back JDBC transaction on Connection 。但是数据库中仍然插入
A23:mysql的root账户,是自动提交的。所以,要设置,或者选择另外的数据库。后面用sqlite和postgre试了一下。事务回滚后,数据库中的数据也就删除了。
Q24:spring中配置占位符?
A24:<context:property-placeholder location="classpath:jdbc.properties" />或者
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/jdbc.properties</value>
</property>
</bean>
http://inmethetiger.iteye.com/blog/1733222