SpringMVC开发入门讲义

整个实现过程中:

用户请求的往往是服务器的一个处理程序,这个处理程序会调用后台的数据处理。最终会把处理后的数据交付到页面上。

开发规则:单一职责,开闭职责。

MVC的设计模式,优点,将这个请求和响应分为了控制器,数据,视图三者,这三者彼此之间是独立。但是三者之间有关联。每次用户请求的时候经过统一的控制器处理,最终响应给客户的就是视图。耦合性降低,维护的难度降低。

2.MVC的框架,这个框架将我们的Web开发进行整合,整合有一个总的核心的控制器,然后其它的控制器都受它的控制。

SpringMVC是Spring中的一个子框架,包含了我们Web开发的时候所采用的MVC的设计模式的实现解决方案。

3.实现第一个SpringMVC的开发:

1)SpringMVC加入到Spring框架里。

a.如何将applicationContext.xml设置为当我们的web启动的时候,就自动加载到内存中。在web.xml里做配置:

<!-- 对web服务器采取监听,监听的目的就是一旦web服务器启动,那么就加载spring的配置 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

2)开发一个针对SpringMVC框架的配置文件,springmvc.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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
        default-autowire="byName"
        >
</beans>

3)那么既然springmvc.xml,springmvc.xml也要随着web服务器的启动而自动加载。

注意:1)关于前端控制器中的url路径的匹配为什么会采用*.action.

如果是采用/*,那么会将由控制器转发的jsp页面也会进入到前端控制器的拦截中,然后会映射相应的控制器,

这样就会导致找不到相应的控制器出错。

<!-- 随着web服务器的加载,前端控制器(中央控制器就要初始化,并且开始工作了) -->
   <servlet>
     <servlet-name>springmvc2</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 的值大于0就表示随着服务器启动,这个servlet就自动被初始化 -->
     <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
     <servlet-name>springmvc2</servlet-name>
     <url-pattern>*.action</url-pattern><!--配置的访问路径,一定是按照这种格式写  -->
  </servlet-mapping>

4)开发控制器,该控制器继承自Controller

public class TestController implements Controller {

    @Autowired
    private UserInfoService userInfoService;
    public UserInfoService getUserInfoService() {
        return userInfoService;
    }
    public void setUserInfoService(UserInfoService userInfoService) {
        this.userInfoService = userInfoService;
    }
    @Override
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        // TODO Auto-generated method stub
        UserInfo user = new UserInfo();
        List<UserInfo> userInfoList = userInfoService.getlist(user);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("userlist",userInfoList);
        modelAndView.setViewName("/index.jsp");
        return modelAndView;
    }

}

5)将springmvc.xml里做配置,该配置将开发的bean对象加入到spring中:

<!-- 把控制器交付给spring管理 -->
    <bean name="/getusers.action" class="com.jinglin.hotelsup.controller.TestController"></bean>
    <!-- handler路径适配器,将url的路径同bean里的name进行比对 -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    <!-- 视图解析的bean对象 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

6)页面通过jstl解析从控制器里传出的数据

<c:forEach items="${userlist}" var="user">
           姓名:${user.username}
     </c:forEach>

执行的流程图:

整个SpringMVC的执行流程:

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

7. ViewResolver 结合Model和View,来渲染视图

8. 将渲染结果返回给客户端。

Spring工作流程描述

为什么Spring只使用一个Servlet(DispatcherServlet)来处理所有请求?

详细见J2EE设计模式-前端控制模式

Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?

符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。

5.实际项目中开发SpringMVC,是通过注解的方式开发

一个功能模块------->一个控制器

开发的时候,在springmvc.xml里配置:

<!-- 用注解的方式开发控制器 -->
   <context:annotation-config>
        <mvc:annotation-driven>
        </mvc:annotation-driven>
   </context:annotation-config>
   <!-- 引入解析jstl的类 -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
   <!-- 将控制器的包扫描到spring里 -->
   <context:component-scan base-package="com.jinglin.hotelsup.controller"></context:component-scan>

2)开发控制器的类:

@Controller
public class UserInfoController {
    @Autowired
    private UserInfoService userInfoService;

    @RequestMapping(value="/login.action",method=RequestMethod.POST)
    public String userlogin(HttpServletRequest request,
                           HttpSession session){
        //request.setCharacterEncoding("utf-8");
        //获取前台传入来的数据
        String username = request.getParameter("username");
        String userpwd = request.getParameter("userpwd");
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername(username);
        userInfo.setUserpwd(userpwd);
        //调用service层,得到业务数据
        List<UserInfo> list=userInfoService.getlist(userInfo);
        if(list!=null){
            if(list.size()>0){
                UserInfo u = list.get(0);
                session.setAttribute("user",u);
                return "redirect:index.jsp";
            }else{
                request.setAttribute("info","用户名或密码输入错误!");
                return "forward:login.jsp";
            }
        }else{
        return null;
        }
    }

}

3)解决提交的时候的乱码问题:POST提交(配置在web.xml里)

<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 
时间: 2024-10-11 09:22:11

SpringMVC开发入门讲义的相关文章

Spring MVC系列:(1)SpringMVC快速入门

回顾一下struts2,struts2框架有如下特点: struts.xml配置文件,必须以struts.xml命名,且放在src目录下[配置] 每次请求action时,都创建action实例[单例/多例] action类一成不变的直接或间接继续ActionSupport类[类层面] action类中的业务控制方法总是相类似的签名且无参[方法层面] action类中,接收参数要用成员变量和对应的set方法或set/get方法[成员变量层面] 1.什么是springmvc,它与spring有什么关

DOJO开发: 入门介绍

决定写么这么一个前端框架的系列文章, 还是很需要勇气的. 因为从现在软件开发岗位分工来说, 我一是个标准的后台开发岗, 所以前端的知识(html, css, javascript)还是捉襟见肘的, 所以大家还是多多包涵下, 如果文中有什么问题, 请帮忙指出来. 一般很多后端的同学有这样的需求: 一个人要开发完一个完整的管理系统, 而又没有前端开发资源, 这时候只能一切靠自己了. 嗯, 做一个全栈工程师, 我骄傲!  首先我介绍下我的前端知识体系. 对于html, css, javascript的

SpringMVC从入门到精通

一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet>     <servlet-name>

SpringMVC基础入门

一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet>     <servlet-name>

SpringMVC基础入门,创建一个HelloWorld程序

ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the ma

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

[050] 微信公众平台开发入门视频教程已发布

2014年4月26日晚8点,我在CSDN社区在线培训课堂讲解了微信公众平台开发入门的相关知识,受到广大网友的一致好评,在此非常感谢大家的支持!课程结束后,很多网友表示由于报名人数限制.临时有事等原因,未能参加,希望能够提供录制视频的观看地址.视频教程的主要内容包括: 1.移动APP发展趋势(Native APP.Web APP.Light APP) 2.微信公众平台基础知识(服务号/订阅号.公众账号注册的注意事项.微信认证) 3.开发模式的使用(启用开发模式.接收与响应消息.回复文本/图文/音乐

SpringMVC从入门到精通之第四章

第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面.中间的业务逻辑是调用业务类处理的这个就是MVC设计模式的思路.我们来看下这个注解的源码: package org.springframework.stereotype; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java

ArcGIS API for Silverlight开发入门准备

原文:ArcGIS API for Silverlight开发入门准备 微软的Silverlight提供了跨浏览器和跨平台开发环境,在Web中可用于创建和展现富互联网应用(RIA,Rich Internet Application). ArcGIS API for Silverlight 能够让的Silverlight应用程序具有集成ArcGIS Server.ESRI MapIt和Bing Maps服务的能力.利用 ArcGIS Server 和Bing Maps资源,比如说Maps.Loca