SpringMVC入门案例SpringMVC、Spring、mybitis整合

Spring MVC

1、 springMVC简介

springMVC是spring家族的一个表现层的一个模块,其核心是通过核心前端控制器dispatcherServlet来过滤前端的请求

2、 入门案例
  • 场景:在前端显示一个数据表格

  • 步骤

    • 创建web工程
    • 添加jar包:springMVC、spring
    • 在web.xml中添加一个DispatcherServlet 需要初始化一个springMVC容器
    <!-- 配置springMVC的核心前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 默认加载/WEB-INF/{servlet-name}-servlet.xml -->
        <!-- 设置加载配置文件路径为classpath:springmvc.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
    
    • 创建springmvc.xml

    • 创建一个商品pojo

    • 创建一个商品的Controller

      传统方式:实现一个Controller接口,需要把Controller配置到springmvc.xml中

    public class ItemController implements Controller {
        /**
    	 * ModelAndView:
    	 	model:需要展示的数据
    	 	view:需要页面显示的路径
    	 */
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		
    		//等同于把数据放在request域中
    		modelAndView.addObject("itemList", list);
            //设置展示或者跳转路径
    		modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
    		return modelAndView;
    	}
    }
    
    <!-- name:url访问路径	class:Controller全限定名 -->
    <bean name="/list.action" class="com.edu.controller.ItemController"></bean>
    

    注解方式:添加@Controller标签,需要开启注解扫描

    @Controller
    public class ItemController2 {
    
    	@RequestMapping("/list")
    	public ModelAndView List(HttpServletRequest request, HttpServletResponse response) throws Exception {
    
    		ModelAndView modelAndView = new ModelAndView();
    		//等同于把数据放在request域中
    		modelAndView.addObject("itemList", list);
            //设置展示或者跳转路径
    		modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
    		return modelAndView;
    	}
    }
    
    <!-- 开启注解扫描 -->
    <context:component-scan base-package="com.edu"/>
    
    • 创建jsp,测试
3、springMVC的三大核心组件
  1. 处理器映射器(HandlerMapping):找到目标控制器
<!-- 配置文件加载最新处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
  1. 处理器适配器(HandlerAdapter):找到目标控制器中的目标方法
<!-- 配置文件加载最新处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

注:可以在xml配置文件中用<mvc:annotation-driven/>代替上述配置

  1. 视图解析器(ViewResover):解析html代码,并展示
<!-- 可不配置,默认配置文件已配置 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
4、springMVC、spring、mybatis整合
  1. 持久层:dataSource、sqlSessionFactory、MapperScannerConfigurer(mapper映射)
<!-- 配置dataSource  -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    ......
</bean>
<!-- 配置sqlSessionFactoryBean  -->
<bean class=" org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="typeAliasesPackage" value="com.edu.ssm.pojo"></property>
</bean>
<!-- mapper扫描器  -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.edu.ssm.mapper"></property>
</bean>
  1. 业务层:事务、注解扫描器
<context:component-scan base-package="com.edu.ssm.serviceImp"/>
 	<!-- 事务配置 -->
 	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 		<property name="dataSource" ref="dataSource"></property>
 	</bean>
 	
 	<tx:advice id="tx" transaction-manager="transactionManager">
 		<tx:attributes>
 			<!-- 传播行为 -->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
 		</tx:attributes>
 	</tx:advice>
 	
 	<aop:config>
 		<aop:advisor advice-ref="tx" pointcut="execution(* com.edu.ssm.serviceimpl.*.*(..))"/>
 	</aop:config>
  1. 视图层
<context:component-scan base-package="com.edu.ssm.controller"></context:component-scan>
<!--  注解驱动 目的:加载新版本的处理器映射器、处理器适配器-->
 <mvc:annotation-driven/>
<!--  配置视图解析器的前缀和后缀,即逻辑视图会加上此前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/jsp/"></property>
 <property name="suffix" value=".jsp"></property>
</bean>
  1. web.xml
<!--   前端控制器 -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

<!--   监听器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
5、 springMVC接收数据(数据绑定)
  1. 默认绑定

    HttpServletRequest request, HttpServletResponse response,HttpSession session,Model model

  2. 基础数据类型

    规则:页面参数的名字(name属性)和形参中的名字保持一致。若不同,则使用@RequestParam注解

@RequestMapping("/itemEdit")
/**
 * value:前台的name属性
 * required:是否必要,默认值true
 * defaultValue:设置默认值
 */
public String itemEdit(@RequestParam(value="id",required=false,defaultValue="1")int itemId,Model model) {
	Items items = itemsService.findById(id);
	model.addAttribute("item", items);
	return "editItem";
}
  1. 绑定pojo:会自动把前台传来的数据的name值与pojo里的属性进行匹配,成功赋值,不成功为默认值
@RequestMapping("/updateitem")
public String updateItem(Items item,Model model) {
	itemsService.update(item);
	return "success";
}

注意:提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容。

  1. 绑定pojo中的pojo:原理和绑定pojo一样,但前台需要修改name值,如:
//A里面有一个items实体类
<input type="text" name="items.name"/>
  1. 绑定数组:和基础数据类型绑定方式相同
@RequestMapping("/updateitem")
public String updateItem(int[] ids,Model model) {
	itemsService.update(item);
	return "success";
}
6、解决乱码

springMVC并没有像Struts2那样处理了乱码问题,所以需要自己处理

  1. post乱码:在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>
  1. get乱码:
String name = new String(item.getName().getBytes("iso-8859-1"),"utf-8");
7、自定义转化器

在pojo类的日期属性上添加如下注解:

@DateTimeFormat(pattern = “yyyy-MM-dd”)

8、springmvc与struts2不同

1、 springmvc的入口是一个servlet即前端控制器(DispatherServlet),而struts2入口是一个filter(StrutsPrepareAndExecuteFilter)过虑器。

2、 springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

3、 Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面。Jsp视图解析器默认使用jstl。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值