`
edwin492
  • 浏览: 115996 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring源码学习

    博客分类:
  • SSH
阅读更多

 

Jarorg.springframewrork.beansorg.springframework.beans.factoryBeanFactory类。BeanFactoryspring IOC的最基本的容器接口,其定义了对容器的一系列基本操作。如getBean(String name)返回容器中名namebean

IOC容器启动:

ContextLoaderListener继承ContextLoader类,实现ServletContextListener接口。ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。ContextLoaderListener就实现此监听接口,在contextInitialized方法中初始化应用容器,在contextDestroyed中关闭应用容器。ContextLoader类载入IOC容器作为根上下文存入ServletContext。此类主要包括对根上下文的初始化、关闭等相关操作。在创建WebApplicationContext时调用AbstractApplicationContext中的refresh()方法对WebApplicationContext进行初始化。

完成对ContextLoaderListener的初始化后,Tomcat会开始初始化DispatcherServletDispatcherServlet会建立自己的ApplicationContext,并以ServletContext中的根上下文作为自己的父上下文进行初始化,存入servletcontext中。其创建过程与创建根上下文类似。

       DispatcherServlet继承FrameworkServlet继承HttpServletBean继承HttpSevlet,故此该类也为一个Servlet类。springweb首先将传统的httpservlet抽象类包装成了beanframeworkservlet抽象出了web框架中的servlets的一些基本行为,比如对application context的访问;dispatcherservlet的主要工作就是将一个request分发到一个合适的处理器上,并将处理返回的modelandview绘制出来返回给客户端。FrameWorkServlet中的initServletBean调用DispatcherServlet中的onRefresh进行初始化,onRefresh调用initStrategies()方法对springMVC初始化HttpServletBean中的initServletBean()方法为空方法,其实现内容由其子类决定,此为templates的应用。(由具体类实现 ,子类可以改变实现内容,而不用修改操作流程。)

springmvc:

SpringMVC框架主要由DispatcherServlet、处理器映射、处理器、视图解析器、视图组成。

     整个处理过程从一个HTTP请求开始:

1DispatcherServlet接收到请求后,根据对应配置文件中配置的处理器映射,找到对应的处理器映射项(HandlerMapping),根据配置的映射规则,找到对应的处理器(Handler)。
2)调用相应处理器中的处理方法,处理该请求,处理器处理结束后会将一个ModelAndView类型的数据传给DispatcherServlet,这其中包含了处理结果的视图和视图中要使用的数据。
3DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将视图要显示的数据传给对应的视图,最后给浏览器构造一个HTTP响应。
DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。

 

 

@Controller
@RequestMapping("/login.action")
public class LoginAction {
	//@RequestMapping(params= "method=validate",method=RequestMethod.POST)
	@RequestMapping(params = "method=validate")
	public String login(@ModelAttribute("userBean") UserBean userBean, HttpServletRequest request,
			HttpServletResponse response) {
		if(!"admin".equals(userBean.getName())){
			
			return "index";
		}
		if(!"123456".equals(userBean.getPassword())){
			return "index";
		}
		return "WEB-INF/view/main";
	}
	@RequestMapping(params = "method=validate2")
	public String login2(@ModelAttribute("userBean") UserBean userBean, Model model) {
		if(!"admin".equals(userBean.getName())){
			model.addAttribute("msg", "用户名错误");//加入属性及值到model中
			return "index";
		}
		if(!"123456".equals(userBean.getPassword())){
			model.addAttribute("msg", "用户密码错误");
			return "index";
		}
		return "WEB-INF/view/main";
	}
	@RequestMapping(params = "method=validate3")
	public ModelAndView login3(@ModelAttribute("userBean") UserBean userBean, HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView model = new ModelAndView();
		model.addObject("userBean", userBean);
		if(!"admin".equals(userBean.getName())){
			model.setViewName("index");
			return model;
		}
		if(!"123456".equals(userBean.getPassword())){
			model.setViewName("index");
			return model;
		}
		model.setViewName("WEB-INF/view/main");
		return model;
	}
	/**note:
	 * import org.springframework.web.portlet.ModelAndView; 
	 *	不应该引入这个ModelAndView 应该引入: 
	 *	import org.springframework.web.servlet.ModelAndView; 
	 *  否则跳转的路径将不正确
	 */
}

 model

 

public class UserBean {
	private String name;
	private String password;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

 

applictionContext:

 

<?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">
        
	<context:component-scan base-package="com.springmvc.action"/>
	
	<bean id="ViewResovler" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp"></property>
	</bean>
	
</beans>

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  ${userBean.name}
    <form action="<%=basePath%>login.action?method=validate" method="post">
    	username:<input type="text" name="name"/><br/>
    	password:<input type="text" name="password"/><br/>
    	<input type="submit" value="ok"/>
    </form>
    ${msg}
     <form action="<%=basePath%>login.action?method=validate2" method="post">
    	username:<input type="text" name="name"/><br/>
    	password:<input type="text" name="password"/><br/>
    	<input type="submit" value="ok"/>
    </form>
    ${userBean.name}
     <form action="<%=basePath%>login.action?method=validate3" method="post">
    	username:<input type="text" name="name"/><br/>
    	password:<input type="text" name="password"/><br/>
    	<input type="submit" value="ok"/>
    </form>
  </body>
</html>

 web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<servlet>
		<servlet-name>dipatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:applicationContext.xml</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>dipatcher</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
 

 

 

分享到:
评论

相关推荐

    Spring源码学习一:源码分析概述1

    Spring源码学习概述 Spring是Java生态系统中的一种流行的开源框架,由Rod Johnson创立于2003年。Spring框架的主要目标是使Java应用程序的开发变得更加简洁、灵活和可维护。Spring框架的核心思想是基于依赖注入...

    spring源码学习之思维导图

    1、spring 的整体架构 2、spring的基本实现(xml的加载原理、标签解析、bean加载) 3、容器扩展 4、ioc和aop 5、事务 6、springmvc 7、dispatcherServlet

    struts+hibernate+spring源码学习:hr考勤管理系统.rar

    struts+hibernate+spring源码学习:hr考勤管理系统.rar

    Spring源码学习工具(包括编译版源码、未编译版源码和相关工具)

    Spring源码学习是深入理解这个框架工作原理的重要途径。这份"Spring源码学习工具"包含了编译版和未编译版的源码,以及相关辅助工具,旨在帮助开发者更有效地探索Spring的内部机制。 首先,让我们谈谈编译版和未编译...

    Spring源码学习加注释,方便学习.zip

    spring源码中文注释方便学习,spring源码学习加注释。 spring源码中文注释方便学习,spring源码学习加注释。 spring源码中文注释方便学习,spring源码学习加注释。 spring源码中文...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    struts+hibernate+spring源码学习:BBS系统

    struts+hibernate+spring源码学习:BBS系统 注意:此资源已经更新,请大家下载 struts+hibernate+spring源码学习:BBS系统(6月5日上传版) 页面: http://download.csdn.net/source/1383098

    SpringMVC精品资源--spring源码学习附注释(Version 4.2.0),the second deb.zip

    在标题中提到的"Spring源码学习附注释(Version 4.2.0)",这部分内容指的是Spring框架的核心源代码,版本为4.2.0。源码学习对于深入理解Spring的工作原理和扩展自定义功能至关重要。注释的加入使得源码更易于阅读和...

    Spring高级源码学习笔记.zip

    总之,Spring源码学习是一个深化编程技能,理解设计模式,以及提高问题解决能力的过程。通过深入研究,程序员不仅可以优化自己的代码,还能更高效地利用Spring框架提供的功能,提升项目的可维护性和扩展性。

    Spring源码学习文档,绝对值得好好研究~~

    Spring源代码解析(一)Spring中的事务处理.doc Spring源代码解析(二):ioc容器在Web容器中的启动.doc Spring源代码分析(三):Spring JDBC.doc Spring源代码解析(四):Spring MVC.doc Spring源代码解析(五):Spring ...

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    Spring源码学习-JPetStore.part3

    spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包

    SpringStudy:GitHub下载的Spring源码,用于Spring源码学习

    Spring框架 这是Spring框架的所在地:所有的基础。 总体来说,Spring框架和Spring项目系列通常简称为“ Spring”。 Spring提供了Java编程语言以外的所有所需内容,可用于为各种场景和体系结构创建企业应用程序。 请...

    Spring源码学习-JPetStore.part1

    spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导入eclipse中运行。共3个压缩包

    Spring源码学习-JPetStore.part2

    spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包

    spring 源码环境搭建

    "spring源码" 是指 Spring 框架的源代码。 部分内容解释 1. 下载 GitHub 客户端安装 下载 GitHub 客户端是因为 Spring 源码托管在 GitHub 上,所以我们需要下载 GitHub 客户端来 clone Spring 源码。安装成功后,...

    spring源码注释中文

    Spring 源码注释中文版的提供,使得开发者能够更加深入地理解 Spring 的工作原理,无需经过复杂的编译过程,可以直接阅读源码注释来学习。 Spring 框架主要由以下几个关键模块组成: 1. **Core Container(核心...

    spring 源码中文注释

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP...通过学习源码,我们可以更全面地掌握Spring框架,提升自己的技术水平,更好地应对各种复杂的软件开发挑战。

Global site tag (gtag.js) - Google Analytics