Spring,SpringMVC,Mybatis第3节

目录

Spring MVC

Spring MVC常用注解

关系流程图

搭建springMVC基础环境

设计流程


Spring MVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2(一般老项目使用)等。

原    版

SpringFrameWork
应    用
分离了控制器、模型对象
特    点
易于同其它View框架无缝集成

语    言

Java

spring MVC框架
通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、VelocityTilesiText和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫开发者只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。
spring MVC优点

Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。

它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所具有的优势。而且框架本身有代码,看起来容易理解。

spring MVC测试(关于Spring MVC Controller 层的单元测试)

测试准备工作:

1、搭建测试Web环境

1

2

3

4

5

@RunWith(UnitilsJUnit4TestClassRunner.class)

@SpringApplicationContext({

"classpath:*.xml","file:src/main/webapp/WEB-INF/spring-configuration/*.xml",

"file:src/main/webapp/WEB-INF/*.xml"

})

2、注入Controller 类

1

2

@Controller

BeanControllercontroller;

3、编写测试数据

测试数据的文件名一定要与测试类的文件名相同,比如测试数据BeanControllerTest.xml ,测试类 BeanControllerTest。

4、注入测试数据

1

2

3

@Test

@DataSet

publicvoidtestBean(){}

Spring MVC常用注解

 

MVC已经是现代Web开发中的一个很重要的部分。

之前的项目比较简单,多是用JSP 、Servlet + JDBC 直接搞定,在项目中尝试用 Struts(Struts MVC)+Spring+Hibernate, 严格按照分层概念驱动项目开发,因项目需求一直不断变化,功能不断扩充、增强,技术构建也几经改变到目前有个稳定的应用,体会了很多感受。

MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,C(控制器)将V(视图、用户客户端)与M(javaBean:封装数据)分开构成了MVC ,这边不去讨论项目中是否应用MVC ,也不针对MVC的实现原理进行讲解,而是探讨实践中如何从应用SSH, 到Struts(Struts MVC)+Spring+Hibernate的演化过程。

先看 Struts 如何与 Spring 结合处理一次简单的请求响应代码,前台可以设为用 AJAX 调用:

1. 在 struts-config.xml 文件中加入

<!--用于声明GetPersonList。do请求委托Spring处理-->

<action path="/GetPersonList" scope="request"type="org.springframework.web.struts.DelegatingActionProxy">

</action>

2.在 applicationContext.xml 文件中加入

<!-- 指定GetPersonList处理的代码,和注入实现业务的代码 -->

<bean name="/GetPersonList" class="cn.base.GetPersonListAction">

<property name="getPersonList" ref="getPersonListServices">

</property>

</bean>

3.cn.base.GetPersonListAction 实现请求响应代码

可以看出一次请求需求如此多的步骤,在加上一个项目下来有很多这样的请求响应,将给配置文件管理带来很大的麻烦。

经过对 Spring 的深入应用, Spring 本身提供的 URL 请求控制,对其天然支持可以让我们不需要 applicationContext.xml 再次声明一次 URL 请求 Bean ,即减少了 Struts 的声明 URL ,达到减少些繁琐的配置。但只是少了一些而已,同样也会面临着配置文件的管理问题。

Spring 注解将给我们的工作带来些轻松,利用反射机制原理出现的注解就是为了解决配置大量的配置问题。请看下处理一次简单的请求响应代码

@Controller --声明控制器

@RequestMapping("/person") –声明URL(使用方法:类前面可以使用把相同的提出来,方法前面可以使用只要写后面的就可以)

public class PersonControl extends BaseController {

@Autowired –业务接口注入

private personServices personServices;/*** 获得人员列表*@param request* @param response* @throws Exception*/

@RequestMapping(params = "method=geList") --即处理/person.do? method=geList方法

public void getnodeList(HttpServletRequest request,HttpServletResponse response) throws Exception { //处理请求//处理响应}}

可以看出,在代码上加入注解可以省去我们上面说的多个配置文件的工作,达到简便的 MVC 处理请求响应。

再配上简单的配置文件声明,即可轻松处理项目的全部请求控制工作。

Spring MVC乱码问题

在使用Spring MVC 做java Web 项目时,乱码问题时常都会出现,解决方法也不尽相同,有简单也有复杂的;如果加入了Spring框架之后就不一样了,可以采用Spring框架自带的过滤器CharacterEncodingFilter,这样可以大大减轻了我们的工作量,即简单方便又容易理解,配置方式如下:在web.xml文件中filter的位置加上如下内容:

<filter>

<filter-name>encodingFilter</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>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>*.htm</url-pattern>

</filter-mapping>

springmvc实现上传文件代码片段

<?xml version="1.0" encoding="UTF-8"?>

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /></bean>

@Controller

@RequestMapping("/common")

public class CommonController {

@RequestMapping(value = "/upload")

public @ResponseBody String upload(@RequestParam("file") MultipartFile file, HttpSession session) throws Exception {

File localFile = new File("c:/test/a.rar");

file.transferTo(localFile);

return "success";

}

}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

关系流程图

搭建springMVC基础环境

--添加ioc,webmvc

--添加src/applicationContext.xml

设计流程

/cost/list.do

-->DispatcherServlet

-->handlerMapping

-->CostListController

    -->CostDao 

-->ViewReslver

-->/free/fee_list.jsp

 先定义接口然后进行反向生成类,操作步骤如下:

 

实现一个ICostDao

package com.dalu.sui.dao;

 

import java.util.List;

 

public class CostDao implements ICostDao{

    @Resource//注入

    private JdbcTemplate template;

     /**

     *(non-Javadoc)

     *@see com.dalu.sui.dao.ICostDao#findAll

     */

    public List<Cost> findAll(){

      String sql = "select * from cost";

      return list;

}

    public List<Cost> findPage(int page){

    String sql ="select * from cost limit ?,5";(第几页算出的值?)

   int begin = (page-1)*5;

   Object[] params ={begin};

    List<Cost> list = template.query(sql,params,rowMapper);

     return list;

}

}

生成一个ICostDao接口

package com.dalu.sui.dao;

 

import java.util.List;

 

public interface ICostDao{

 

    public List<Cost> findALL();

    /**

      *提取指定页的记录,一页5条记录

       *@param page

        *@return

       */

    public List<Cost> findPage(int page);

}

编写一下ICostListController

package com.dalu.sui.controller;

 

//前面配置里面已经配置扫描了,第二节applicationContext.xml配置文件下

//  <!-- springMVC配置文件,包含 网站跳转 逻辑的配置 -->

  //  <!--让它扫描com.dalu.sui下的包-->

    //     <!-- 把业务逻辑组件也扫描进来 -->
     // <context:component-scan 
      //base-package="com.dalu">

@Controller//扫描进来

public class ICostListController{

 

   @Resource//注入(扫描以注入的方式来进行)

    private ICostDao costDao;//注入

 

    public String execute(ModelMap model){

     List<Cost> list = costDao.findAll();

      model.put("costs",list);

      model.put("page,page);

      return "index/index_list";//返回fee_list.jsp界面

 

}

}

在webapp下配合文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>ssm-cusc</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 启动spring的容器 -->
  <!-- needed for ContextConfigLocation -->
 <context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:applicationContext.xml</param-value>
 
 </context-param>
<!-- Bootstraps the root web application context before -->
<listener>
 <listener-class>org.springframework.web.context.</listener-class>
</listener>
<!-- 2、springMVC的前端控制器拦截所有请求 -->
<servlet>
   <servlet-name>dispatcherServlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>location</param-value>
   
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!--3、字符编码过滤器   -->
 <filter>
        <filter-name>encoding-filter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- 4、使用Rest风格的URI ,将页面普通的post请求转化为指定的地方-->
    <filter>  
    <filter-name>httpPutFormcontentFilter</filter-name>  
    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>  
</filter>  
<filter-mapping>  
    <filter-name>httpPutFormContentFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  

</web-app>

配置 ViewReslver,还得在applicationContext.xml中配置

<bean id="viewResovler" 
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value=" / "></property><!-显示的jsp的路径的前缀,我是放在webapp文件下面-->

<property name="suffix" value=".jsp "></property>

 

</bean>

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

留给自己看的,看看自己是否一直能持之以恒,同时也是鞭策自己的一种的方法,敬奋斗的自己。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值