• 001_动力节点_SpringMVC4_SpringMVC简介


    1、视频的下载地址是

    下载地址:百度云盘 链接:http://pan.baidu.com/s/1ge58XW3 密码:yd5j
    http://www.java1234.com/a/javaziliao/javaweb/2017/0920/8975.html

    第一个springmvc入门的helloword

    第一步新建立一个web project

    添加对应的lib包

    这里需要注意的是我使用的是myeclipse 2015不支持MyEclipse2015不支持spring-web-4.2.4.RELEASE.jar会导致在tomcat部署应用的时候,导致程序无法部署spring-webmvc-3.1.1.RELEASE.jar.

    这里使用的是较低的版本

    第二步:

    在src目录下建立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:context="http://www.springframework.org/schema/context" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.2.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.2.xsd">    
            <!-- 配置control -->
            <bean id="/hello.do" class="com.weiyuan.test.MyController"/>
    
    </beans>

    接下来建立control文件

    package com.weiyuan.test;
    
    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 MyController implements Controller{
    
        /*
         * ModelAndView 返回值是数据和视图
         * 在web-inf下的资源是外部浏览器是不能直接访问的,web-root下的资源浏览器是能够直接访问的
         * 所以web-inf下的资源是不能通过浏览器直接重定向访问的
         * */
        @Override
        public ModelAndView handleRequest(HttpServletRequest request,
                HttpServletResponse reponse) throws Exception {
            // TODO Auto-generated method stub
            ModelAndView mv = new ModelAndView();
            mv.addObject("message","welcome to first springmvc helloword");
            mv.setViewName("/WEB-INF/jsp/welcome.jsp");
            System.out.println("handleRequest is called");
            return mv;
        }
    
    }

    然后在web-inf目录下建立文件夹jsp在jsp目录下建立welcome.jsp文件,将在MyController 中设置的信息mv.addObject("message","welcome to first springmvc helloword");显示出来

    welcome.jsp文件内容如下所示:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    ${message}
    </body>
    </html>

    接下来在web.xml中配置springmvc的中央处理器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringMVc-01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 配置中央调度器 -->
        <!-- 中央控制器,这里千万不能配置成 -->
        <servlet>
            <servlet-name>springmvc</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>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    </web-app>

    这样整个项目的配置就成功可

    在浏览器上输入

     我们想tomcat一运行的时候就创建我们的org.springframework.web.servlet.DispatcherServlet,我们可以在web.xml中进行配置

    添加下面的配置 <load-on-startup>1</load-on-startup>

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringMVc-01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 配置中央调度器 -->
        <!-- 中央控制器,这里千万不能配置成 -->
        <servlet>
            <servlet-name>springmvc</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>springmvc</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    </web-app>

    在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是:

    标记容器是否在启动的时候就加载这个servlet。

    当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

    当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

    正数的值越小,启动该servlet的优先级越高。

    如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序。


    配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。
    PS:一般我们在开发web应用时,都会配置这个参数,有两个好处:1、如果初始化过程失败,则容器会提示启动失败,此时我们能够提前知道相关错误;2、配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可立即响应web请求。

    注意点2:使用视图解析器

    我们在springmvc中我们注册使用视图解析器

       <!-- 视图解析器 -->                
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <!-- 配置从项目根目录到指定目录一端路径 ,建议指定浅一点的目录-->
                <property name="prefix" value="/WEB-INF/jsp/"></property>
                <!-- 文件的后缀名 -->
                <property name="suffix" value=".jsp"></property>
            </bean>

     prefix表示前缀的意思,指定的第一级目录的位置是web-inf下的jsp目录

    suffix表示后缀,表示文件的后缀是.jsp

    用视图解析器用于表示文件的拼接

    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:context="http://www.springframework.org/schema/context" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.2.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.2.xsd">    
            <!-- 配置control -->
            <bean id="/hello.do" class="com.weiyuan.test.MyController"/>
    
           <!-- 注册视图解析器 -->
           <!-- 视图解析器 -->                
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <!-- 配置从项目根目录到指定目录一端路径 ,建议指定浅一点的目录-->
                <property name="prefix" value="/WEB-INF/jsp/"></property>
                <!-- 文件的后缀名 -->
                <property name="suffix" value=".jsp"></property>
            </bean>
    </beans>

    然后control的代码也可以做出下面的修改为

    package com.weiyuan.test;
    
    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 MyController implements Controller{
    
        /*
         * ModelAndView 返回值是数据和视图
         * 在web-inf下的资源是外部浏览器是不能直接访问的,web-root下的资源浏览器是能够直接访问的
         * 所以web-inf下的资源是不能通过浏览器直接重定向访问的
         * */
        @Override
        public ModelAndView handleRequest(HttpServletRequest request,
                HttpServletResponse reponse) throws Exception {
            // TODO Auto-generated method stub
            ModelAndView mv = new ModelAndView();
            mv.addObject("message","welcome to first springmvc helloword");
            //mv.setViewName("/WEB-INF/jsp/welcome.jsp");
            //使用视图解析器之后,视图解析器会帮助我们进行拼接,这里直接写出welcome就可以了
            mv.setViewName("welcome");
            System.out.println("handleRequest is called");
            return mv;
        }
    
    }

     注意点三:

    常见的url-pattern配置有以下三种:

    第一种:
    '*.xxx', 以指定后缀结尾的请求都交由DispatcherServlet处理
    第二种:
    '/' 将会覆盖容器的default servlet, 凡是在web.xml文件中找不到匹配的URL,它们的访问请求都将交给该Servlet处理(静态资源也将会拦截). 所以web.xml没有配置其他特殊路径的servlet, 基本上所有的请求都交由DispatcherServlet处理.
    关于什么是default servlet, 可以参考我之前的博文.
    第三种:
    '/*' 错误的配置,会拦截*.jsp, *.jspx的请求, 使用这种配置最终要转发到一个JSP页面,仍然会由DispatcherServlet, 解析jsp地址, 不能根据jsp页面找到handler, 会报错
    对于第一种扩展匹配, 是最简单的. 也是使用最简单的了.但是现在如此流行restful风格的URL, 这种带小尾巴的URL, 还是有点low的.
    第二种配置使用/, 通过该配置是可以实现rustful风格的URL的.

      <url-pattern>*.do</url-pattern>,不能写成/*.如果写成/*就是对应浏览器所有的请求都交给中央处理器去请求

    例如在浏览器中输入访问的是默认的index.jsp文化

    访问的是index.jsp.如果上面把配置修改成/*

    访问的时候就会出现错误,找不到对应的处理文件。因为中央处理器没有定义对应的control对请求进行处理

    配置成/的时候,会拦截静态资源文件

    在浏览器中输入http://localhost:8080/SpringMVc-01/访问的是index.jsp文件,配置成/是可以访问jsp文件的

    在jsp文件中我们去访问一张图片,这个时候如果配置成/,是无法访问到这张图片的,如何解决了

    我们来看下代码

    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%
    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>
        This is my JSP page. <br>
        <img alt="pic" src="images/1.png">
      </body>
    </html>

    对应的web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringMVc-01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 配置中央调度器 -->
        <!-- 中央控制器,这里千万不能配置成 -->
        <servlet>
            <servlet-name>springmvc</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>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

     

    在浏览器中输入

    这个时候是无法访问到对应图片的

    如何解决了,解决办法有下面的三种形式

    第一种方法,在web.xml中进行配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>SpringMVc-01</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 解决url-pattern是/的问题 -->
      <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>
       <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
      </servlet-mapping>
         <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
      </servlet-mapping>
      <!-- 配置中央调度器 -->
        <!-- 中央控制器,这里千万不能配置成 -->
        <servlet>
            <servlet-name>springmvc</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>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

     第二种方法:静态资源无法访问问题-使用MVC的default-servlet-handler解决

    在springmvc.xml中添加

      <mvc:default-servlet-handler/>    

    但是需要因为mvc的约束

     xmlns:mvc="http://www.springframework.org/schema/mvc" 

    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:context="http://www.springframework.org/schema/context" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.2.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.2.xsd">
            
            <mvc:default-servlet-handler/>    
            <!-- 配置control -->
            <bean id="/hello.do" class="com.weiyuan.test.MyController"/>
    
           <!-- 注册视图解析器 -->
           <!-- 视图解析器 -->                
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <!-- 配置从项目根目录到指定目录一端路径 ,建议指定浅一点的目录-->
                <property name="prefix" value="/WEB-INF/jsp/"></property>
                <!-- 文件的后缀名 -->
                <property name="suffix" value=".jsp"></property>
            </bean>
    </beans>

     第三种方法:静态资源无法访问问题-使用MVC的resources解决

    <?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" 
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.2.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.2.xsd">
            
            <mvc:resources location="/images/" mapping="/images/**"></mvc:resources>  
            <!-- 配置control -->
            <bean id="/hello.do" class="com.weiyuan.test.MyController"/>
    
           <!-- 注册视图解析器 -->
           <!-- 视图解析器 -->                
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <!-- 配置从项目根目录到指定目录一端路径 ,建议指定浅一点的目录-->
                <property name="prefix" value="/WEB-INF/jsp/"></property>
                <!-- 文件的后缀名 -->
                <property name="suffix" value=".jsp"></property>
            </bean>
    </beans>

     北京动力节点-SpringMVC4-016-请求路径问题-什么是绝对路径.avi

    绝对路径就是一个具体的地址,马上可以定位到四川省成都市高新区xx小区xx栋xx单元

    相当路径:需要选取一个具体的参照物,例如人民公园门口,北京有人民公园,上海有人民公园,需要有一个参照路径是上海还是北京

    参照路径和相当路径一起组合构成一个绝对路径

    浏览器中输入的http开头的都是绝对路径

    北京动力节点-SpringMVC4-017-请求路径问题-相对路径的参照路径.avi

    只要不已http开头的都可以认为是相对路径

     

     相对路径中带有反斜杠的前台路径:jsp中对应的路径,对应的参照位置是tomcat所在路径

     相对路径中带有反斜杠的后台路径:java代码或者xml等对应的路径,对应的是tomcat中对应的webapp应用的路径

    北京动力节点-SpringMVC4-018-请求路径问题-举例.avi

    案例一:

     

     

     北京动力节点-SpringMVC4-019-请求路径问题-举例2.avi

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%
    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>
        This is my JSP page. <br>
        <img alt="pic" src="images/1.png">
      </body>
    </html>

    这里要访问images目录下的1.png文件,在jsp页面中如果写成/images/1.png,带有斜杠对应的参照路径就是当前的tomcat服务器,资源是访问不到的,不写斜杠对应的参照路径就是当前的应用

  • 相关阅读:
    51nod乘积之和
    Dell服务器安装OpenManage(OMSA)
    Nginx反向代理PHP
    搭建haproxy
    108. Convert Sorted Array to Binary Search Tree
    60. Permutation Sequence
    142. Linked List Cycle II
    129. Sum Root to Leaf Numbers
    118. Pascal's Triangle
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/8504190.html
Copyright © 2020-2023  润新知