上一篇我们的配置是基于XML配置的HelloWorld。Spring提供了一种更加便捷的配置方式,基于Annotation注解的配置方式,web.xml保持不变,还是与之前一样,需要修改的是springmvc-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- springmvc 注解驱动 -->
<mvc:annotation-driven/>
<!-- 扫描器 -->
<context:component-scan base-package="com"/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/view/"></property>
<!-- 后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
我们在xml中注册一个SpringMVC的注解驱动,然后添加一个扫描器。用来扫描控制器。这样我们就不需要再xml中频繁的添加控制器bean。
控制器代码:
package com.smile.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping(value="/hello.do")
public String hello(String userName,Model model){
System.out.println(userName);
model.addAttribute("helloworld", "Hello:"+userName);
return "index";
}
}
在控制器的类名上我们添加注解@Controller标示它是一个控制器。在方法名上我们添加注解@RequestMapping来说明方法处理的链接。这样Spring就会自动给我们解析URL及处理的类。
有时会出现乱码问题,我们可以添加一个filter来进行过滤:
package com.smile.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class Utf8Filter
*/
@WebFilter("/*")
public class Utf8Filter implements Filter {
/**
* Default constructor.
*/
public Utf8Filter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
类名上的注解@WebFilter标明它是一个过滤器,里边的/*标示过滤所有的链接。同时在doFilter中设置request的字符集为UTF-8。这样我们就为项目添加了一个过滤器。