`
chenkangxian
  • 浏览: 88000 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring mvc 解析

    博客分类:
  • web
阅读更多

项目地址:http://www.springsource.org/

文档地址: http://www.springsource.org/documentation

下载: http://www.springsource.org/download

 

spring mvc 简介:

 

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。spring mvc 实现的功能类似struts 提供的mvc 解决方案,但是比spring 更加轻量级且更加灵活。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring Web MVC 框架是围绕 DispatcherServlet 设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是非常简单的 Controller 接口,只有一个方法 ModelAndView handleRequest(request, response)

 

                 spring mvc结构图(来自官网)

 

 

由于不在本文讨论范畴,为了方便起见,笔者仅对dao层和service层做了简单的实现,如需连接数据源,请读者自行修改。

 

 

所需jar包:


 

 

web.xml 配置:

<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<filter>
		<filter-name>Spring character 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>
	</filter>
	<filter-mapping>
		<filter-name>Spring character encoding filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.css</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.gif</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.jpg</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.js</url-pattern>
	</servlet-mapping>
 

 

 

springmvc-servlet.xml:

 

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

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- 自动搜索  所有配置的autowired或者resource都是在该目录下面-->
	<context:component-scan base-package="com"></context:component-scan>
	<bean
		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

	<!-- @Autowired -->
	<bean
		class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

	<!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/page/" />
		<property name="suffix" value=".jsp" />
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
	</bean>
	<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource"
		p:basename="i18n/messages" />

	<!-- 配置rest,根据不同请求,做不同的响应  如 /blog/1.json /blog/1.xml-->
	<bean
		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<!-- 在没有扩展名时即: "/user/1" 时的默认展现形式 -->
		<property name="defaultContentType" value="application/xml" />
		<!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
		<property name="mediaTypes">
			<map>
				<entry key="html" value="text/html" />
				<entry key="json" value="application/json" />
				<entry key="xml" value="application/xml" />
			</map>
		</property>
		<property name="defaultViews">
			<list>
				<!-- 输出为JSON数据-->
				<bean
					class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
					<property name="prefixJson" value="false" />
				</bean>
				<!-- 输出为xml数据-->
				<bean id="marshallingView"
					class="org.springframework.web.servlet.view.xml.MarshallingView">
					<constructor-arg>
						<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
							<property name="classesToBeBound">
								<array>
									<value>com.mvc.domain.User</value>
									<value>com.mvc.domain.UserList</value>
								</array>
							</property>
						</bean>
					</constructor-arg>

				</bean>
			</list>
		</property>
	</bean>

	<!-- 使用resource标签 -->
	<bean
		class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

</beans>

 

 

 

contoller 代码:

 

package com.mvc.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.mvc.domain.User;
import com.mvc.domain.UserList;
import com.mvc.service.UserService;

/**
 * @Project: spring_mvc_test
 *
 *
 * @Annotation: 用户controller
 *
 * @Date:2011-9-5
 *
 */
@Controller
@RequestMapping("/user")
public class UserController{

	//@Resource(type=com.mvc.service.UserServiceImpl.class)
	@Autowired
	private UserService userServiceImpl;
	
	@InitBinder  
	public void initBinder(WebDataBinder binder) {  
		//设置日期转换
	    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
	    dateFormat.setLenient(false);  
	    binder.registerCustomEditor(Date.class, new CustomDateEditor(  
	            dateFormat, false));  
	} 
	
	@RequestMapping("hello")
	public ModelAndView hello(){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("hello");
		mav.addObject("message", "hello every body !");
		return mav;
	}
	
	@RequestMapping("register")
	public ModelAndView register(){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("register");//后台的jsp页面名称
		return mav;
	}
	
	/**
	* 
	*  传递表单内容
	*
	* Last Modification Time: 2011-9-5
	*
	* @param request
	* @param response
	* @param user 传递过来的用户
	* @return
	 */
	@RequestMapping(value="/show", method = RequestMethod.POST)
	public ModelAndView showUser(HttpServletRequest request,HttpServletResponse response,User user){
		
		System.out.println("host: " + request.getRemoteHost());
		System.out.println("userinfo: " + user);
		ModelAndView mav = new ModelAndView();
		mav.setViewName("display");//后台的jsp页面名称
		mav.addObject("birthday",user.getBirthday());
		mav.addObject("id",user.getId());
		mav.addObject("money",user.getMoney());
		mav.addObject("name",user.getName());
		mav.addObject("user",user);
		userServiceImpl.addUser(user);
		return mav;
	}
	
	@RequestMapping("/find/{id}")
	public ModelAndView getUserById(@PathVariable int id,HttpServletRequest request,HttpServletResponse response){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("display");//后台的jsp页面名称
		System.out.println("id: " + id);
		User user = new User();
		user.setName("aaaaa");
		mav.addObject("user",user);
		return mav;
	}
	
	/**
	 * 跳转到doadd的jsp页面
	 * 
	*
	* Last Modification Time: 2011-9-5
	*
	* @return
	 */
	@RequestMapping("/doaddview")
	public ModelAndView doaddview(){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("add");//后台的jsp页面名称
		return mav;
	}
	
	@RequestMapping(value="add")
	public String doadd(HttpServletRequest request,HttpServletResponse response){
		System.out.println("Hello aaaaaaa ");
        request.setAttribute("message", "Hello aaaaa ! ,@RequestMapping(value='/add')"); 
        return "hello";
	}
	
	/**
	 * 通过这种方法也可以获得user
	*
	* Last Modification Time: 2011-9-5
	*
	* @param user
	 */
	@RequestMapping(value="add")
	public void addUser(@ModelAttribute("user") User user){
		System.out.println("controller 级联");
		System.out.println(user.getName());
	}
	
	@RequestMapping("/showuser")
	public ModelAndView getById(){
		User user = new User();
		user.setBirthday(new Date());
		user.setId(111);
		user.setMoney(112.0f);
		user.setName("aaaaaaaaa");
		return new ModelAndView("display", "user", user);
	}
	
	
	
	@RequestMapping("/showsth")
	public ModelAndView  getByIdAndName(){
		List list = new ArrayList();
		User user = new User();
		user.setBirthday(new Date());
		user.setId(111);
		user.setMoney(112.0f);
		user.setName("aaaaaaa");
		
		list.add(user);
		list.add(user);
		list.add(user);
		list.add(user);
		list.add(user);
		list.add(user);
		
		UserList userList = new UserList();
		userList.setList(list);
		userList.setName("UserList");
		return new ModelAndView("display", "userlist", userList);
	}
	
	
	
}
 

 

user dao 代码:

package com.mvc.dao;

import com.mvc.domain.User;

/**
 * @Project: spring_mvc_test
 *
 * @Annotation: 用户dao
 *
 * @Date:2011-9-5
 *
 */
public interface UserDAO {

	public void addUser(User user);
	public User findUser(int id);
}
 

 

user dao impl 代码:

package com.mvc.dao;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import com.mvc.domain.User;

/**
 * @Project: spring_mvc_test
 *
 * @Annotation: user dao 的实现类,
 * 				Data Access Object or DAO
 * 				使用@Repository来标识
 *
 * @Date:2011-9-5
 *
 */
@Repository
@Scope("prototype")
public class UserDAOImpl implements UserDAO{

	@Override
	public void addUser(User user) {
		
	}

	@Override
	public User findUser(int id) {

		return null;
	}

}
 

 

user 类代码:

package com.mvc.domain;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
 * @Project: spring_mvc_test
 *
 * @Annotation: 用户
 *
 * @Date:2011-9-5
 *
 */
@XmlRootElement(name="user")
public class User {

	private int id;
	private String name;
	private Date birthday; 
	private float money;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public float getMoney() {
		return money;
	}
	public void setMoney(float money) {
		this.money = money;
	}
	
	public User() {}
	
	public User(String name) {
		this.name = name;
	}
	
	public User(float money) {
		this.money = money;
	}
	
	public void showName() {
		System.out.println(this.name);
	}

	@Override
	public String toString() {
		return "id=" + this.id + " name=" + this.name + " birthday="
				+ this.birthday + " money=" + this.money;
	}

}
 

 

userlist 代码:

package com.mvc.domain;

import java.util.List;

import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @Project: spring_mvc_test
 *
 * @Annotation:
 *
 * @Date:2011-9-7
 *
 */
@XmlRootElement
public class UserList {
    private String name;
    private List list;
    
    @XmlElements({
        @XmlElement(name = "user", type = User.class)
    })
    public List getList() {
        return list;
    }
 
    public void setList(List list) {
        this.list = list;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 

 

user service 代码:

package com.mvc.service;

import com.mvc.domain.User;

/**
 * @Project: spring_mvc_test
 *
 *
 * @Date:2011-9-5
 *
 */
public interface UserService {

	   public void addUser(User user);
	   public User findUser(int id);
}
 

 

user service impl 代码:

package com.mvc.service;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mvc.dao.UserDAO;
import com.mvc.domain.User;

/**
 * @Project: spring_mvc_test
 *
 * @Annotation: userservice 实现类
 * 				使用@Service标注service
 *
 * @Date:2011-9-5
 *
 */
@Service
public class UserServiceImpl implements UserService {

	//@Resource(type=com.mvc.dao.UserDAOImpl.class)
	@Autowired
	private UserDAO userDAOImpl;
	
	@Override
	public void addUser(User user) {
		System.out.println("调用userservice的addUser方法");
		userDAOImpl.addUser(new User());
	}

	
	@Override
	public User findUser(int id) {
		System.out.println("调用userservice的findUser方法");
		userDAOImpl.findUser(111);
		return null;
	}

}
 

 

 

 

 

 

 

 

 

  • 大小: 53.7 KB
分享到:
评论
2 楼 bingyingao 2011-10-08  
很好,mark下
1 楼 zhanjun 2011-10-08  
写的很详细啊

相关推荐

    Spring MVC jar包

    - **基本概念**:Spring MVC提供了一个灵活的MVC实现,包括请求映射、视图解析、模型绑定等功能。它通过DispatcherServlet作为前端控制器,负责接收请求并分发到相应的处理器。 - **组件**:主要包括Model、View、...

    Spring MVC 4.2.3

    7. **多视图解析器**:Spring MVC支持多种视图解析器,如JSP、FreeMarker、Thymeleaf等,可以根据项目需求灵活选择。 8. **模板引擎集成**:例如,与Thymeleaf的集成使得开发者能编写声明式逻辑的模板,提高了视...

    最全最经典spring-mvc教程

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...

    spring mvc 4.0

    7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,视图解析器可以根据配置自动选择合适的视图技术。 8. **异步处理**:Spring MVC 4.0引入了异步请求处理,通过@...

    Mastering Spring MVC 4(2015.09)源码

    视图解析器是Spring MVC中用于确定视图名对应的实际资源路径的组件。例如,InternalResourceViewResolver可以将视图名转换为JSP页面的URL。 依赖注入(Dependency Injection, DI)是Spring框架的核心特性之一。在...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。这个教程“Spring MVC - A Tutorial”旨在帮助开发者深入理解和掌握Spring MVC的核心概念和...

    Spring MVC 教程快速入门 深入分析

    六、Spring MVC mvc.xml配置文件片段讲解:Spring MVC通过配置文件来定义处理器映射、视图解析器、静态资源处理等。配置文件对于整个框架的运行至关重要。 七、Spring MVC如何访问到静态的文件:描述了如何配置...

    spring mvc框架依赖全面jar

    `org.springframework.web.servlet-3.1.1.RELEASE.jar` 是Spring MVC的主要组件,它负责处理HTTP请求,提供模型-视图-控制器的实现,包括控制器、视图解析和模型数据绑定等功能。 `org.springframework.web-3.1.1....

    Spring MVC所需jar包

    2. **Spring MVC 模块**:`spring-webmvc.jar` 是 Spring MVC 的核心组件,它实现了 MVC 设计模式,提供请求处理、视图解析等功能。这个 jar 包是构建基于 Spring 的 Web 应用必不可少的。 3. **Spring Web 模块**...

    spring mvc jar包

    以上这些库构成了 Spring MVC 开发的基础环境,开发者可以利用它们来创建控制器、定义模型、配置视图解析器,以及实现事务管理、数据访问等复杂功能。通过 Spring MVC,开发者能够以声明式的方式组织应用程序,提高...

    Spring MVC使用Demo

    为了实现这些功能,Spring MVC的配置文件(如servlet-context.xml)需要正确配置组件扫描、视图解析器、拦截器等。不过,现代Spring MVC项目往往倾向于使用Java配置或Spring Boot的自动配置,减少了XML的使用。 在...

    Spring mvc 教程

    ### Spring MVC 教程知识点详解 #### Spring Web MVC 框架简介 Spring Web MVC 是 Spring Framework 的一个重要组成部分,主要用于构建基于 Java 的 Web 应用程序。它提供了一个灵活且强大的 MVC 实现,使得开发者...

    看透Spring MVC源代码分析与实践

    9 Spring MVC的配置:从配置文件web.xml开始到使用Java配置类,了解这些配置是如何在源代码中被Spring MVC解析和使用的。 通过深入阅读和理解Spring MVC的源代码,我们可以更深刻地认识到框架的设计哲学和实现原理...

    spring MVC .docx

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。Spring MVC的设计目标是提供一个清晰的组件化架构,使得开发者可以独立地开发和测试控制器、...

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    - 配置Spring MVC:在Spring的配置文件中,我们需要定义DispatcherServlet、视图解析器和处理器映射器等。 - 集成MyBatis:引入MyBatis的依赖,配置SqlSessionFactoryBean,创建MapperScannerConfigurer扫描Mapper...

    Spring MVC 4.2.4.RELEASE 中文文档

    **Spring MVC 4.2.4.RELEASE 中文文档** Spring MVC是Spring框架的一个核心组件,专注于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者组织和分离应用的业务逻辑、数据处理以及用户界面。...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    在提供的"spring MVC.docx"文档中,可能详细介绍了如何配置Spring MVC环境,创建Controller,处理请求,以及如何配置视图解析器等内容。对于初学者来说,这是一份很好的实践指南,可以帮助理解Spring MVC的工作原理...

Global site tag (gtag.js) - Google Analytics