zoukankan      html  css  js  c++  java
  • 0052 Spring MVC入门--环境搭建--第一个入门示例

    Spring MVC是什么

    Spring是一个框架,包括了MVC、IoC、AOP等等组件

    MVC是一种思想,并非Spring框架独有,全称是Model、View、Controller,即模型、视图、控制器。服务器收到请求,交给Controller,Controller负责找到对应的一些方法完成计算,将计算的结果放到Model中,再调用View到Model中取出数据,将数据展现出来。工厂生产是不是也是这个过程,接收订单-->车间生产-->出货?

    在MVC思想出现以前,是jsp时代,整个web站几乎都由jsp组成,客户端直接请求jsp,调用一些JavaBean完成数据库操作及一些计算,再返回结果。jsp既当Controller,又当view,导致整个站点耦合性过强,代码复用率低,后期不易维护,小站点用这种技术,问题还不大,如果大型站点用这个技术,简直不敢想。

    MVC思想将服务器从收到请求到返回结果的全过程进行了拆分,实现了组件间的解耦,组件代码可以重用,后期要增改功能都容易。

    MVC框架除了Spring MVC外,还有Struts等

    Spring MVC的Hello World

    下载Spring框架的jar包:http://maven.springframework.org/release/org/springframework/spring/
    下载Spring要依赖的commons-logging.jar:https://commons.apache.org/proper/commons-logging/download_logging.cgi

    新建一个web project,解压缩下载的Spring框架,将libs目录下的XXX.RELEASE.jar及commons-logging.jar拷贝到WebRoot/WEB-INF/lib下面。在项目名上右键Refresh,Web App Libraries里就可以看到刚拷贝进去的jar包了

    在WEB-INF目录下添加个applicationContext.xml,内容先空着。
    在web.xml中添加以下配置:

    <servlet>
    <servlet-name>springmvc</servlet-name><!-- servlet名称,随意 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 该servelt位于webmvc下 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>  <!-- 固定写法 -->
        <param-value>/WEB-INF/applicationContext.xml</param-value> <!-- 这是配置文件路径 -->
    </init-param>
    <load-on-startup>1</load-on-startup> <!-- 启动顺序,表示web应用启动是立即加载该servlet -->
    </servlet>
    <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>   <!-- 表示所有请求都交给DispatcherServlet处理 -->
    </servlet-mapping>
    

    关于DispatcherServlet:这是前端控制器,继承自HttpServlet,负责分发请求到对应的Java类,也就是Handle,就是Controller了。该servlet的加载需要一个xml配置文件,就是applicationContext.xml,这个xml文件的名称不固定,位置也不固定,能让DispatcherServlet找到,又不被用户访问到就行。如果不配置,那么会自动到WEB-INF下去找[DispatcherServlet的名称]-servlet.xml。DispatcherServlet根据xml配置文件创建WebApplicationContext容器对象,就是上下文环境。

    写一个Controller,代码如下:

    package mvcdemo;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    public class HelloController implements Controller {   //需要继承Controller接口
    
        @Override  //重写handleRequest方法,返回值是ModelAndView对象,参数为request和response
        public ModelAndView handleRequest(HttpServletRequest arg0,
                HttpServletResponse arg1) throws Exception {
            ModelAndView mav=new ModelAndView();
            mav.getModel().put("msg", "这是Model中的数据");
            mav.setViewName("hello");    
            return mav;      
        }
    }
    
    

    在WEB-INF/content下写一个jsp页面,就是view。jsp页面一般都放到web-inf下面,可以保护视图页面不被用户直接访问到

    <%@page pageEncoding="utf-8" 
            contentType="text/html;charset=utf-8" %>
    <html>
        <head>
            <title>这是第一个Spring MVC页面</title>
        </head>
        <body>
            ${msg} <!-- 到Model中拿到名为msg的数据 -->
        </body>
    </html> 
    

    配置applicationContext.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:util="http://www.springframework.org/schema/util" 
        xmlns:context="http://www.springframework.org/schema/context" 
        xmlns:mvc="http://www.springframework.org/schema/mvc"  
        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-4.0.xsd 
                            http://www.springframework.org/schema/context 
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd 
                            http://www.springframework.org/schema/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
                            http://www.springframework.org/schema/aop 
                            http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
                            http://www.springframework.org/schema/util 
                            http://www.springframework.org/schema/util/spring-util-4.0.xsd 
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd "> 
        <!-- 创建HelloController的bean对象,提供给下面的handlerMapping使用 -->
        <bean id="helloController" class="net.sonng.mvcdemo.controller.HelloController" ></bean>
        
        <!-- DispatcherServlet找到这个bean,完成请求到Controller的映射,这里是:hello----helloController -->
        <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
            <property name="mappings" >
                <props>
                    <prop key="hello" >helloController</prop>
                </props>
            </property>
        </bean>
        
        <!-- 这是视图解析器,跟Controller里面的mav.setViewName("hello")连起来构成完整的视图地址:/WEB-INF/content/hello.jsp -->,
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
            <property name="prefix" value="/WEB-INF/content/" />
            <property name="suffix" value=".jsp" />
        </bean>
        
    
       </beans>
    

    将该应用部署到tomcat,访问:localhost:8080/mvcdemo/hello,


    其他:
    上面的applicationContext.xml配置还改为这样:

        <!-- 用请求作为name属性的值,实际上就是请求到controller的映射 -->
        <bean name="/hello" class="net.sonng.mvcdemo.controller.HelloController" />
        <!-- 下面两个bean用来完成上面请求到controller的映射 -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
    

    同时要修改Controller:mav.setViewName("/WEB-INF/content/hello.jsp");,用全地址指定视图

  • 相关阅读:
    JVM底层原理 内存模型+GC垃圾回收
    新Socket与网络小结
    Redis五大数据结构及基本指令用法
    MySql高级汇总-事务,索引,SQL调优,分库分表,读写分离
    笔试错题整理
    设计模式(思路)
    网络编程
    linux
    基础算法--KMP匹配字符串
    基础算法--整数二分
  • 原文地址:https://www.cnblogs.com/sonng/p/6633035.html
Copyright © 2011-2022 走看看