springMVC学习总结 springmvc post中文乱码解决 springmvc处理日期格式

以下博客来源我的有道云笔记,点击查看原文

springMVC工作原理

springMVC学习总结 springmvc post中文乱码解决 springmvc处理日期格式
请求会先找到分发器 servlet DispatchServlet 所以在导入相应jar包后 应当:
1.在项目的web.xml文件中配置分发器:

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

2.分发器通过web.xml中指定的路径找到src目录下的spring的处理器,spring配置文档中会有一个默认的处理器(即可手动配置修改也可不配) (在以上代码3—4行间加入以下代码指定spring配置文档路径)

<init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
</init-param>

默认处理器:

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

    以下配置可以通过多个路径访问同一个控制器:
    
<!-- 处理器(是专门寻找控制器)
   	 可以配置多个请求路径url,寻找到控制器            
<bean class=" org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 <property name="mappings">
        <props>
            key表示请求路径 
            <prop key="/a.action">userController</prop>
            <prop key="/b.action">userController</prop>
            <prop key="/c.action">userController</prop>
        </props>
    </property>
</bean>  
 -->

3.把控制器,即控制层类交给spring容器管理,即在spring配置文档中:(处理器通过name属性的url地址找到控制器)

 <bean name="/user_login.action" class="cn.springmvc.controller.UserController"></bean>

4.在控制器类中,可以通过ModelAndView来进行页面跳转等一系列动作。以下是跳转到指定页面:(默认是转发)

public class HomeController extends AbstractController {

    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        System.out.println("HomeController...");
        return new ModelAndView("index");
    }
}

重定向:

return "redirect:/jsp/index.jsp";//重定向

5.在web.xml配置逻辑试图( 如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
如果Action中书写的是视图真实名称,那么视图解析器就可选配置 )

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 路径前缀 -->
            <property name="prefix" value="/jsp/"/>
            <!-- 路径后缀 -->
            <property name="suffix" value=".jsp"/>
            <!-- 前缀+视图逻辑名+后缀=真实路径 -->
</bean>

6.显示到页面

使用注解:

1.依然在web.xml文件中配置好 分发器 并且通过分发器找到spring的配置文件
2.在spring配置文件中配好命名空间后让springioc容器去扫描带@Controller的类
3.在控制器类 标明注解 @Controller 表示把控制器交给容器管理
在方法上方 标明注解 @RequestMapping(value="/user_login.action",method=RequestMethod.POST)
value属性表示访问路径 method表示使用什么方法

控制器中的方法参数可以写多个 ,可以写一个实体类,直接点出里面从页面传过来的属性值
也可以写页面的一个字段名

@RequestMapping(value="/user_login.action",method=RequestMethod.POST)
	public String login(Model mv,
			User user,
			String sex,
//			HttpServletRequest request,
			HttpServletResponse response){
		System.out.println(user.getUsername()+user.getPassword()+sex+user.getBirthday());
		System.out.println("SpringMVC 注解版本...."); 
		//把数据存放在reqeust作用域
		mv.addAttribute("request_username", "张三");
		//把数据存放在session作用域中
//		request.getSession().setAttribute("session_username", "李四");	
		return "/jsp/index.jsp";//默认转发
		//return "redirect:/jsp/index.jsp";//重定向
	}

拓展:

1.得到页面传过来的日期处理

 /**
 * 自定义类型转换器
 */
@InitBinder
public void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
    //注册一个客户编辑器
	binder.registerCustomEditor(
            Date.class, 
            new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}	

2.解决中文乱码问题(加入web.xml)

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>