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

转载于:https://www.cnblogs.com/kebibuluan/p/8504190.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值