SpringMVC的配置⽂件
⼀、root标签
跟spring配置⼀样,root标签是beans,毕竟springmvc是spring的⼀个模块
在springmvc⾥,⾃动扫描主要是配置controller:
⼆、⾃动扫描:
⼆、⾃动扫描:在
<context:component-scan base-package="ller"/>
三、解析器Resolver:解析器有很多种,⽐较重要的是ViewResolver
ViewResolver也有很多种,其中⽐较重要和常⽤的是InternalResourceViewResolver(内部资源视图解析器)
代码:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
如果没有视图解析器,我们在controller⾥⾯的代码是这样的:
@Controller
public class LoginActionController {
@RequestMapping("/index")
public String toIndex(HttpServletRequest request, ModelMap map, HttpSession session) {
return "/WEB-INF/jsp/index.jsp";
}
⽽使⽤了视图解析器,我们的代码是这样的:
@Controller
public class LoginActionController {
@RequestMapping("/index")
public String toIndex(HttpServletRequest request, ModelMap map, HttpSession session) {
return "index";
}
区别在最后⼀句,我们不需要给出⽬标视图的全路径了。
InternalResourceViewResolver的主要作⽤也在于此,给出内部资源的路径和前后缀。
当然还有其他的视图解析器,⽐如Xml ViewResolver,UrlBasedViewResolver等
四、对静态资源的处理:在l⾥⾯,我们配置了springmvc的DispatcherServlet
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
部分的url-pattern是"/",这表明,DispatcherServlet会帮我们截获所有的url请求,并将请求发送给对应的controller。
也包括静态⽂件,⽐如.js⽂件,图⽚⽂件,css⽂件的请求。显然这是有问题的,因为没有controller会去处理静态⽂件,这会导致静态⽂件查不到。
这也是为什么servlet-mapping是下⾯这样的:
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
然后在controller⾥⾯,我们会这么写:
@Controller
public class LoginActionController {
@RequestMapping("/index.do")
public String toIndex(HttpServletRequest request, ModelMap map, HttpSession session) {
return "index";
}
通过这种⽅式,等于是我们只让DispatcherServlet去处理了.do后缀的请求,controller也只会处理.do后缀的请求。
对应的,我们的url是这样的:st/index.do
很显然这样看着很奇怪,⽽且不符合REST风格。
所以spring团队给出了2种解决⽅案:
⽅案⼀、在springmvc的配置⽂件⾥⾯加上如下标签:
<mvc:default-servlet-handler />
如果发现是静态资源的请求,就将该请求转由Web应⽤服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
这表⽰,
这表⽰,如果发现是静态资源的请求,就将该请求转由
⽅案⼆、在在springmvc的配置⽂件⾥⾯加上如下标签:
⽅案⼆、
<mvc:resources />
这表⽰,由Spring MVC框架⾃⼰处理静态资源
可以把静态⽂件放到项⽬的任何地⽅,⽐如/WEB-INF下⾯,classpath下⾯(⽽传统的⽅案,我们只能把静态⽂件放到web应⽤的根⽬录下⾯)。然后通过location属性告诉spring,静态资源放在哪⾥
例如:
<mvc:resources location="/js,/,/WEB-INF/js,classpath:/resource" mapping="resource/**"/>
假设我们:
在根⽬录下有个image⽂件夹,⾥⾯有个icon.png⽂件
在WEB-INF下的js⽬录下有个test.js⽂件
在build路径下的resource⽬录⾥有个css/test.css⽂件
我们可以分别通过:
来访问。
五、<mvc:annotation-driven />:⽤来隐式的注册注解所需的bean。注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置⼀些messageconverter。即解决了@Controller注解的使⽤前提配置。
六、mvc:message-converters消息转换器:是mvc:annotation-driven的⼀个⼦标签,可以看到它主要处理的是response返回的值,⽐如默认编码,⽐如⽀持Fastjson,当然你可以可以加⼊对其他返回类型的⽀持,⽐如gson,protobuf等等
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- @ResponseBody乱码问题,将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean class="org.verter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<!-- 配置Fastjson⽀持 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="charset" value="UTF-8"/>
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
springmvc的注解有哪些<property name="features">
<list>
<value>WriteMapNullValue</value>
<value>QuoteFieldNames</value>
<value>WriteDateUseDateFormat</value>
<value>WriteEnumUsingToString</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
⽤来拦截url请求。
,⽤来拦截
七、 <mvc:interceptors>:springmvc,
正常的流程,应该是DispatcherServlet先获取所有的URL请求,然后依据规则分发给可以处理这些请求的controller。
⽽使⽤mvc:interceptors后,流程变成了:DispatcherServlet先获取所有的URL请求,对于符合要求格式的URL,先分发给处理,最后再分发给可以处理这些请求的controller。
举例说明:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/static/**" />
<bean class="interceptor.LoginRequiredInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
这个表⽰,它会拦截所有的URL请求,除了static路径下的请求,并交给LoginRequiredInterceptor来处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论