• 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服务器,资源是访问不到的,不写斜杠对应的参照路径就是当前的应用

  • 相关阅读:
    CSS命名法
    CSS伪类
    CSS总结
    CSS应用给网页元素的几种方式总结
    CSS语法小记
    细谈WEB标准
    Spark 个人实战系列(1)--Spark 集群安装
    HBase 实战(1)--HBase的数据导入方式
    shell 脚本实战笔记(9)--linux自动批量添加用户
    shell 脚本实战笔记(8)--ssh免密码输入执行命令
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/8504190.html
Copyright © 2020-2023  润新知