springMVC学习总结 springmvc post中文乱码解决 springmvc处理日期格式
以下博客来源我的有道云笔记,点击查看原文
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>