发表于: 2017-12-16 03:54:17

1 680


今天继续完善spring-mvc的相关学习,总结如下:


spring-mvc配置文件如下

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     http://www.springframework.org/schema/mvc
     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.2.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">



//分发器Dispatcher的配置,在web.xml中的url拦截器就是这个,这个其实在web.xml可以配置多个,用于拦截不同类型的url,起不同的名字即可。

   <bean class="org.springframework.web.servlet.DispatcherServlet"/>


//视图处理器,可以配置两个前缀和后缀属性,方便逻辑视图名的书写。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp"/>

</bean>


//Controller或者叫Handler 包扫描。

<context:component-scan base-package="com.rabbit.controller"/>


//注解驱动,表明项目由注解的方式进行配置,默认使用了两种注解方式的url解析器和注解方式的Handler适配器。

//同时指明了转换器配置的信息

 <mvc:annotation-driven conversion-service="conversionService"/>


//参数类型转换器的配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">

<list>

//自己实现的String转换Date类型的转换器,需要实现Conservert的接口,以便后台方便进行操作。

<bean class="com.rabbit.converter.String_Date_Converter"/>
</list>
</property>
</bean>

</beans>


关于时间的转换处理,网上的解决方式有使用自己写的额转换器的,也有比较方便的json日期转换的,并没有深入的去研究,以后用到了再去试试。



2、关于参数传递。

大致掌握了两大类型的参数传递。

其一简单类型的数据,想数值类型、字符串类型,框架自身都由默认的转换方式,如果图方便,后台方法中使用的形参和前台传递参数的name一致,那么久可以自动完成传递,也就是说这些参数都是被Handler中方法的形参所接受。如果两者不一致,就要在方法形参的前面加上@RequestParam(“参前台参数name”)的方式进行指定。

例如:

public ModelAndView findByID(@RequestParam("jsp_id") int id )

这里的jsp_id实际上是jsp页面中传递参数的名字,它会赋给方法中的形参id,参与业务逻辑。


其二就是pojo类型的参数的传递。

不同于Struts2,struts2中的action中往往包含一个成员变量来接受参数,接受到的参数会自动赋给成这个成员变量。

springmvc在我理解开来似乎也有一个这样的过程,Controller方法中的形参如果是一个pojo类,那么前台页面中参数的命名需要严格的和pojo类的成员变量名一致,对于包装类中的包装pojo类的情况可以使用类似ognl表达式的方式进行深入的赋值。

至于能否前台后台命名不一致,我并不知道。


还有关于springmvc 集合类型参数的传递,上传的使用我没有继续去学习,用到的时候再去摸索。


3、关于RESTful的一些学习

这个东西没有理解的太透,我的理解就是首先它把参数变成了url的一部分,其次不同的操作类型对应不同的方法。但是这么做有什么好出呢?我能理解的就是在传递参数的时候不需要涉及到Context了,其他的好处我目前没有体会,所以也不怎么理解。

具体实现起来就是对后台的@RequestMapping的参数部分使用{***}的占位符,在方法中接受形参的部分使用@PathVariable(“**”)的注解,例如


访问的url为:127.0.0.1:8080/user/delete/2

后台的代码如下:

//{ID}为站位符,指向url中的2.

@RequestMapping("/user/delete/{ID}")

@PathVariable中的(“ID”)和占位符中的ID一致,表明拿到url中的ID,传给后面的id,后面的形参可以和前面的url站位符不一致。当有多个参数时,继续在后面加 /参数 即可,后台用不同的站位符区分。

public ModelAndView delete(@PathVariable("ID") int id)


对于这部分我其实有个疑问就是前台的url地址如何生成?一个一个的拼接么?


其他零碎的坑记录如下:

1、整合mybatis的时候,出现了包扫描怎么都不起作用的情况,必须在mybatis的配置文件指定mapper.xml文件的地址,即是是放在mapper.java一样的文件夹中,一样的名字,namespace确认无误。不指定就报错,找不到方法。抓耳挠腮搞了俩小时,关键在于IDEA对于非Resource目录中的配置文件貌似是给忽略了,需要在maven配置如下代码。表明那些文件是配置文件。只有这样在项目打包后,mapper.xml和mapper.java才会打包到同一个文件夹下。

<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>


2、学会了一个新的标签

<fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>

这个标签是一个转换,可以将时间类型转换为我们需要的String类型格式,使用前提是需要引入

<%@ taglib prefix='fmt' uri="http://java.sun.com/jsp/jstl/fmt_rt" %>

我遇到一个问题就是如果没有最后的_rt,它会和el表达式标签冲突

<%@ page isELIgnored="false"%>

必须加上_rt,但 其中的原因没有理解。





返回列表 返回列表
评论

    分享到