SpringMVC使用

一、在工程目录的web.xml文件中配置Spring以及SpringMVC

D:\workspace_idea\crm_37-0-159-1_BRANCH\src\main\webapp\WEB-INF\web.xml


首先配置Spring

    
        contextConfigLocation
        classpath:/spring/applicationContext.xml
    
    
        contextClass
        org.springframework.web.context.support.XmlWebApplicationContext
    
    
        org.springframework.web.context.ContextLoaderListener
    


再配置SpringMVC

    
        SpringDispatcher
        org.springframework.web.servlet.DispatcherServlet
        
            contextClass
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        
        1
    
    
        SpringDispatcher
        *.htm
    
    
        SpringDispatcher
        *.json
    

Spring编码配置

    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        characterEncodingFilter
        /*
    

错误页面配置:

    
    	403
    	/WEB-INF/views/common/404.jsp
  	
	     
        404     
        /WEB-INF/views/common/404.jsp     
    
         
        405     
        /WEB-INF/views/common/404.jsp     
    
         
        500     
        /WEB-INF/views/common/500.jsp     
    

二、配置src\main\resources\spring\applicationContext.xml

配置applicationContext.xml



    
    
    
    
    

    


三、配置spring-MVC.xml

1、配置SpringMVC静态资源访问方式




	
	
	
2、配置内容协商[关于内容协商可以参考链接: http://sishuok.com/forum/blogPost/list/6996.html]

什么是内容协商?
简单点说,就是同一资源,可以有多种表现形式,比如xml、json等,具体使用哪种表现形式,是可以协商的。

Spring MVC REST是如何决定采用何种方式(视图)来展示内容呢?
1)根据Http请求的header中的Accept属性的值来判读,比如:
Accept: application/xml                将返回xml格式数据 
Accept: application/json               将返回json格式数据
 
优点:是这种方式是理想的标准方式
缺点:是由于浏览器的差异,导致发送的Accept Header头可能会不一样,从而导致服务器不知要返回什么格式的数据
 
2)根据扩展名来判断,比如:
/mvc/test.xml  将返回xml格式数据 
/mvc/test.json 将返回json格式数据 
/mvc/test.html 将返回html格式数据 
 
缺点:丧失了同一URL的多种展现方式。在实际环境中使用还是较多的,因为这种方式更符合程序员的习惯
 
3)根据参数来判断
/mvc/test?format=xml        将返回xml数据 
/mvc/test?format=json       将返回json数据 
 
缺点:需要额外的传递format参数,URL变得冗余繁琐,缺少了REST的简洁风范

具体配置如下:




        
        
              
              
              
               
              
              
               
               
                    
                          json=application/json
                          htm=application/html
                    
             
      

 使用内容协商后,对于同一个URL,例如:http://host:port/user/login.htm或者http://host:port/user/login.json来分别查看URL的页面和返回JSON 
  

内容协商试图解析器




    
        
        
        
        
            
                
            
        
      

    
        
        
        
        
        
        
        
            
                
                
                
                 
            
        
        
      
    
        
            /WEB-INF/views/
        
        
            .jsp
        
        
    
      	
    
        
        
            
                common/500
                common/500
                common/404
            
        
        
        
        
    
	

四、Controll的具体写法

package com.baidu.nuomi.crm.firmoperate.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baidu.nuomi.crm.firmoperate.controller.vo.UserVo;
import com.baidu.nuomi.crm.firmoperate.exception.SalerErrorCode;
import com.baidu.nuomi.crm.firmoperate.service.CrmUserService;
import com.baidu.nuomi.crm.helper.exception.ErrorCodeException;
import com.baidu.nuomi.crm.helper.page.Paging;
import com.baidu.nuomi.crm.helper.utils.ResultVOUtil;
import com.baidu.nuomi.crm.helper.utils.beanconvert.BeanConvertUtil;
import com.baidu.nuomi.crm.sso.authority.AuthorityUtil;
import com.baidu.nuomi.crm.sso.authority.enumeration.RoleEnum;
import com.baidu.nuomi.crm.sso.login.LoginUtil;
import com.niux.acl.model.User;

/**
 * 
 * 为页面提供查询销售相关的服务
 * 
 * @author:tian.zheng
 * @date:2014年9月14日
 * @time:上午8:20:47
 *
 */
@Controller
@RequestMapping("/crm/user/saler")
public class SalerController {
	private final Logger log = LoggerFactory.getLogger(this.getClass());
	@Autowired
	private CrmUserService crmUserService;

	/**
	 * 
	 * 根据当前登录用户的ID(或者是代理用户ID),获取该用户下属销售,有分页
	 * 
	 * @param name
	 *            用户姓名
	 * @param paging
	 * @return
	 */
	@ResponseBody
	@RequestMapping("getSalersByLoginCmId")
	public Object getSalersByLoginCmId(String name, Paging paging) {
		// 获取登录的用户ID
		Long userId = LoginUtil.getAuthorityUser().getUserId();
		// 如果不是城市经理角色、或者代理商城市经理角色,返回错误提示信息
		if (!AuthorityUtil.hasRole(userId, RoleEnum.CITY_MANAGER) && !AuthorityUtil.hasRole(userId, RoleEnum.AGENT_CITY_MANAGER)) {
			throw new ErrorCodeException(new SalerErrorCode(SalerErrorCode.ERROR_LOGIN_ROLE_NOT_CM));
		}
		List resultList = crmUserService.getSalerList(name, paging);
		return ResultVOUtil.retSuccessPage(resultList, paging);
	}
	
	/**
	 * 
	 * 根据当前登录用户的ID(或者是代理用户ID),获取该用户下属销售,有分页
	 * 
	 * @param name
	 *            用户姓名
	 * @param paging
	 * @return
	 */
	@ResponseBody
	@RequestMapping("getSalers")
	public Object getSalers() {
		List salerList = LoginUtil.getSalers();
		log.info("salerList size="+salerList.size());
		return ResultVOUtil.retSuccess(BeanConvertUtil.convert(salerList, UserVo.class));
	}
}


你可能感兴趣的:(Spring)