SpringMvc如何学习框架技术? 就像如上的图示一样,先掌握新技术的体系流程图。在快速弄明白程序执行流程后,在使用过程中 了解细节。

image

 

如何学习框架技术?
就像如上的图示一样,先掌握新技术的体系流程图。在快速弄明白程序执行流程后,在使用过程中
了解细节。

 

工作流程:

1.客户端发送请求

2.客户端发送的请求到达服务器控制器  , 服务器控制器由 Servlet(DispatcherServlet)实现的,来完成请求的转发

3.该控制器(DispatcherServlet)调用了一个用于映射的类 HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。

4.HandlerMapping 将请求映射到对应的处理器 Controller(相当于 Action) 在 Spring 当中如果写一些处理器组件,一般实现 Controller 接口

5.在 Controller 中就可以调用一些 Service 或 DAO 来进行数据操作

6.ModelAndView 用于存放从 DAO 中取出的数据,还可以存放响应视图的一些数据。


7.如果想将处理结果返回给用户,那么在 Spring 框架中还提供一个视图组件 ViewResolver,
该组件根据 Controller 返回的标示,找到对应的试图,将响应 response 返回给用户

 

 

DEMO:

1. 创建springMVC环境

2. 在web.xml中配置中央控制器 DispatcherServlet

<?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">
  <display-name></display-name>    
  <servlet>
          <servlet-name>springmvcExample</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>
        <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>springmvcExample</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

3.新建spring配置文件  springMVC.xml

 

4.编写一个简单的页面. index.jsp, 及成功后跳转的页面WEB-INF/(success.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body style="font-size:30px">

    <form action="login.do" method="post">
        用户名:<input type="text" name="email"><br /> 
        密码:   <input type="text" name="password"><br />
         <input type="submit"value="登录">
    </form>
    <span>${msg}这个是登陆错误后返回的信息</span>
</body>

</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'success.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">
  </head>
  
  <body>
     <h2>   登陸成功! <%=request.getAttribute("msg") %></h2>
  </body>
</html>

5.编写LoginControl 等价于我们之前写的 LoginAction,handleRequest()相当于 execute()方法

package com.control;

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

import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class LoginControl implements Controller
{
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ModelMap map = new ModelMap();
        
        String email = request.getParameter("email");
        String pwd = request.getParameter("password");
        if(email.equals("zkrui2008@163.com")&&pwd.equals("123456"))
        {
            map.put("msg", email);
            return new ModelAndView("success",map);
        }
        map.put("msg", "用戶名或密碼錯!");
        return  new ModelAndView("index",map);
        
        //默认是采用 dispatcher 方式跳转,重定向可以用下面的方式
        //return  new ModelAndView("redirect:/index.jsp",map);
    }

}

 

6.在 Spring 配置文件中,注入 bean(loginControl) ,从如上步骤中,我们已经完成了 Spring MVC 控制流程中的 DispatcherServlet、
Controller、ModelAndView、View     还有 HandlerMapping、ViewResolver,它们不需要自己写,需要配置

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<bean id="loginControl"  class="com.control.LoginControl"/>

<!-- 配置HandlerMapping组件用于实现请求与处理器之间的映射 -->
<bean id="urlMapping"  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="login.do">loginControl</prop>
        </props>
    </property>

</bean>

<!-- 定义ViewResolver组件, 实现根据视图标识获取JSP响应 -->
<bean id="viewResolver"   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- View中用到的相关技术 -->
    <property name="viewClass"  value="org.springframework.web.servlet.view.JstlView"/>
    
    <!-- 后缀 -->
    <property name="suffix" value=".jsp"/>
    <!-- 前缀 -->
    <property name="prefix" value="/" />
</bean>


</beans>

注意:viewResolver中 jsp 文件的名字,是根据我们在 LoginControl 中的具体业务返回的字符串决定
“success”或者“login”

如果响应的页面位于WEB-INF下则可以采用下面的方式配置:

<!-- 后缀 --> <property name="suffix" value=".jsp"/>

<!-- 前缀 --> <property name="prefix" value="WEB-INF/" />

 

2.HandleMapping 组件有很多的实现技术,我们使用的是较为简单的  org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
ViewResolver 组件也有很多的实现技术,我们使用  org.springframework.web.servlet.view.InternalResourceViewResolver
此外,在 ViewResolver 组件中使用的主要解析技术是 JstlView       org.springframework.web.servlet.view.JstlView
(以预防&&配合页面使用 jstl 标签的情况)

 

7.部署测试

posted @ 2014-03-30 23:06  菟丝子  阅读(725)  评论(0编辑  收藏  举报

============================================================================== 
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员

==============================================================================