SpringMVC基础

  • 1.课程介绍
  • 2.SpringMVC概述
  • 3.SpringMVC入门
    • 3.1.入门需知
      • 3.1.1.Jar包管理
      • 3.1.2.核心控制器(前端控制器)
    • 3.2.加入相关Spring的jar包
    • 3.3.配置核心控制器
    • 3.4.准备SpringMVC配置文件
    • 3.5.编写请求处理控制器Controller
    • 3.6.添加处理请求代码
    • 3.7.编写页面
    • 3.8.配置我们的控制器
    • 3.9.访问
    • 3.10.常见问题
  • 4.前端控制器配置
    • 4.1. *.xxx(后缀匹配或扩展名匹配)
    • 4.2. /*
    • 4.3. /(现在最流行的配置方式)
  • 5.业务处理控制器的三种实现
    • 5.1.第一种:实现Controller接口
    • 5.2.第二种:实现HttpRequestHandler接口
    • 5.3.第三种:普通类加注解(建议使用)
  • 6.全注解
    • 6.1.请求映射(匹配)注解
    • 6.2.实例化bean的注解
    • 6.3.注入注解
  • 7.控制器常用操作
    • 7.1.接收请求参数
      • 7.1.1.处理中文参数乱码问题
        • 7.1.1.1.过滤器
          • 7.1.1.1.1.过滤器介绍
          • 7.1.1.1.2.过滤器编写
        • 7.1.1.2.配置字符编码过滤器
      • 7.1.2.参数接收方式
        • 7.1.2.1.通过传统的HttpServletRequest接收
        • 7.1.2.2.通过参数接收
        • 7.1.2.4.URL地址提取数据
    • 7.2.视图解析器
    • 7.3.向页面传值
      • 7.3.1.通过传统的HttpServletRequest传递
      • 7.3.2.使用Model方式
      • 7.3.3.通用ModelAndView对象传递
    • 7.4.跳转方式
      • 7.4.1.请求转发:forward
      • 7.4.2.请求重定向:redirect
      • 7.4.3.注意事项
  • 8.课程总结
    • 8.1.重点
    • 8.2.难点
    • 8.3.如何掌握
    • 8.4.排错技巧
  • 9.常见问题
  • 10.课后练习
  • 11.面试题
  • 12.扩展知识或课外阅读推荐(可选)
    • 12.1.扩展知识
    • 12.2.课外阅读

1.课程介绍

  1. SpringMVC概述; (了解)
  2. SpringMVC入门; (掌握)
  3. 前端控制器配置; (掌握)
  4. 业务控制器的三种实现; (掌握)
  5. 全注解; (掌握)
  6. 控制器常用操作(接收数据,向页面传值,重定向转发); (掌握)

2.SpringMVC概述

  1. SpringMVC是一个基于MVC模式的WEB/表现层框架,它解决WEB开发中常见的问题:参数接收、文件上传/下载、表单验证、国际化等等;
  2. nSpringMVC作为Spring框架一个非常重要的功能模块,可以与Spring无缝集成,提高开发效率;
  3. Spring是一个轻量级的Java 开发框架,为了解决企业应用开发的复杂性而创建。SpringMVC以Spring框架为核心,为应用程序中的Web层(表现层)提出的一套优秀的解决方案;
  4. 目前很多公司都使用SpringMVC,90%的招聘单位要求熟悉使用SpringMVC;
    注意:SpringMvc的功能就是之前Servlet的功能,可以理解为使用SpringMVC代替了Servlet;

3.SpringMVC入门

3.1.入门需知

3.1.1.Jar包管理

  1. SpringMVC是建立在Spring基础上的。所以使用SpringMVC必须先保证你的项目拥有Spring的运行环境;
  2. 使用框架的第一步需要框架的官方网站下载框架相关的文件,而SpringMVC无需单独下载,因为SpringMVC是作为Spring中的一个模块存在,所以我们只需要下载Spring即可;
  3. SpringMVC需要的jar包:
    spring-webmvc-4.1.2.RELEASE.jar – SpringMVC核心包
    spring-web-4.1.2.RELEASE.jar – Spring对Web项目项目的支持

3.1.2.核心控制器(前端控制器)

核心控制器:用于Web层核心功能的处理以及在所有控制器执行之前,所有的WebMvc框架都采用了这种方式,在SpringMVC中使用的是DispatcherServlet为核心控制器. DispatcherServlet核心控制器会拦截匹配的请求,把拦截下来的请求,依据相应的规则分发到目标Controller来处理;

3.2.加入相关Spring的jar包

Spring的相关jar包:
com.springsource.org.apache.commons.logging-1.1.1.jar
spring-beans-4.1.2.RELEASE.jar
spring-context-4.1.2.RELEASE.jar
spring-core-4.1.2.RELEASE.jar
spring-expression-4.1.2.RELEASE.jar
spring-aop-4.1.2.RELEASE.jar – Spring测试需要导入此包
注意:spring orm、jdbc、tx相关jar根据项目使用自行添加;
注意:不要使用spring.3的jar和4.x的jar文件混用;

SpringMVC相关jar包:
spring-web-4.1.2.RELEASE.jar – Spring对web项目的支持
spring-webmvc-4.1.2.RELEASE.jar – SpringMVC核心包

3.3.配置核心控制器

1.webmvc框架的心脏就是核心控制器,负责所有请求的公共功能,然后在分发给具体的控制器(我们编写的控制器),完成业务逻辑,响应视图;

2.核心控制器其实就是一个Servlet,只不过这个Servlet是由SpringMVC框架提供的,不需要自己写,只需要配置,交给容器去管理。在web.xml配置核心控制器(容器启动时就创建sevlet实例对象,并加载classpath下的一个名为spring-mvc.xml文件);

3.4.准备SpringMVC配置文件

SpringMVC是Spring的一个模块,它的配置文件和Spring的配置差不多,复制一份applicationContext.xml修改为spring-mvc.xml;

3.5.编写请求处理控制器Controller

1.SpringMVC中的控制器与以前我们以前学习的servlet作用一样:处理用户请求、调用业务逻辑、响应请求即返回结果视图;
2.SpringMVC中的控制器有一定规范,要么实现接口,要么使用POJO对象与注解配合使用;

public class HelloController implements Controller{public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {//获取请求参数//参数验证//调用service进行业务逻辑处理//返回jsp页面视图return null;}
}

3.6.添加处理请求代码

  1. handleRequest方法的两个参数与我们以前的servlet中service方法一样,request和response对象,我们可以使用这个两个对象完成一次请求的所有工作,比如你可以使用request接受参数,或者使用response重定向等等,注意方法除了返回值以外还有一个返回值ModelAndView;
  2. ModelAndView是SpringMVC控制器中特有一个对象,描述一次请求响应的数据(Model)和 视图(View);

3.7.编写页面

3.8.配置我们的控制器

 SpringMVC是基于Spring,Spring中的核心就是Ioc容器,而Ioc容器中最重要的成员就是<bean>,SpringMVC中的控制器也是一个一个<bean>;

3.9.访问

访问:http://localhost/helloworld

注意:如果你的配置为*.form,并且,访问路径为: http://localhost/helloworld.form

3.10.常见问题

部署项目,启动Tomcat报错,错误信息如下:

原因是:没找到/WEB-INF/springmvc-servlet.xml文件,因为在启动Tomcat服务器的时候会加载web.xml文件,接着初始化SpringMVC中的DispatcherServlet,而这个DispatcherServlet会根据初始化配置加载框架配置文件,如果配置出错,或文件位置不正确,那么会默认加载路径为:/WEB-INF/-servlet.xml的文件;

解决问题方式1:
可以把我们的配置文件更名为springmvc-servlet.xml,然后拷贝到WEB-INF中:

解决问题方式2【推荐】:
一般会将spring系列的配置文件都在放在src中或者resources(没有可以新建)中,我们可以通过以下配置告诉SpringMVC我们的配置文件路径:

4.前端控制器配置

Spring的前端控制器拦截匹配规则(即 … )可以自己定义:

4.1. *.xxx(后缀匹配或扩展名匹配)

  1. .xxx这个拦截固定结尾的url,常见的如.do、*.json、.action等等,这是最传统的方式;
  2. 在实际项目开发中一般会要求遵守restful风格,后缀匹配是匹配不了的;
    例如:查看id为1001的用户信息:/users/1001
  3. 不会导致静态文件(.jpg、.js、.css)被拦截,只有以.xxx结尾的请求才会经过DispatcherServlet处理;

4.2. /*

  1. <url-pattern>/*</url-pattern>会拦截所有url(包括/login、.jsp、.js、png和.html等),一般只用在过滤器上;
  2. 既然<url-pattern>/*</url-pattern>会拦截*.jsp,会出现访问jsp视图时被Spring的DispatcherServlet拦截,导致找不到请求资源引入的404错误,其他资源也一样,所以在SpringMVC的前端控制器中配置/*,是一个错误的配置方式;

4.3. /(现在最流行的配置方式)

  1. <url-pattern>/</url-pattern>也是拦截所有,只不过不会拦截*.jsp;
  2. <url-pattern>/</url-pattern>不会拦截.js、.css、.png、.html、*.jsp等后缀型url;
  3. 但是/匹配覆盖了Tomcat的默认控制器,导致静态资源访问失效,静态资源也被拦截,只有.jsp不会被拦截;
  4. 如果想访问静态资源,必须要开启静态资源访问权限;

注意:Tomcat本身自带有一个默认控制器,匹配方式也是"/",这个默然控制器用于处理静态资源请求。如果我们配置SpringMVC前端控制器为"/",那么Tomcat的默认控制器就不生效,导致静态资源无法访问;
Tomcat/conf/web.xml:

<servlet><servlet-name>default</servlet-name><!-- 处理静态资源,如图片、*.css、*.js、*.html等 --><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet>
<servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

设置静态资源可以访问:
解决办法:SpringMVC开启静态资源控制器

spring-mvc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd
"><!-- 静态资源放行:相当于Tomcat默认控制器的功能 --><mvc:default-servlet-handler />//其它配置略
</beans>

5.业务处理控制器的三种实现

实现Controller接口;
实现HttpRequestHandler接口;
普通类(pojo)和注解 @RequestMapping;

5.1.第一种:实现Controller接口

控制器:

//实现Controller接口
public class Controller01 implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {System.out.println(this.getClass());//模型数据和视图对象ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("/WEB-INF/controller.jsp");return modelAndView;}}

配置:

<bean id="/controller01.form" class="cn.itsource.springmvc._02_controller.Controller01"></bean>

5.2.第二种:实现HttpRequestHandler接口

控制器:

//实现了HttpRequestHandler接口
public class Controller02 implements HttpRequestHandler{@Overridepublic void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  {System.out.println(this.getClass());request.getRequestDispatcher("/WEB-INF/controller.jsp").forward(request, response);}
}

配置:

<bean id="/controller02.do" class="cn.itsource.springmvc._02_controller.Controller02"></bean>

5.3.第三种:普通类加注解(建议使用)

POJO(Plain Ordinary Java Object):简单的Java对象,实际就是普通JavaBean没有继承类,也没有实现类;
控制器:

/*** SpringMVC中的Controller就是单例的(使用成员变量请注意线程安全问题)* 注:不要忘了,配置全注解扫描包才能认识@Controller* @author Administrator*/
@Controller
public class Controller03{@RequestMapping("/method01.form") //配置访问路径public ModelAndView method01(){System.out.println(this.getClass()+":method01");ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("/WEB-INF/controller.jsp");return modelAndView;}@RequestMapping("/controller/method02.form") //配置访问路径public ModelAndView method012(){System.out.println(this.getClass()+":method02");ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("/WEB-INF/controller.jsp");return modelAndView;}
}

注意事项:
1.要使用@Controller注解(创建对象的注解),就需要配置:

<!-- 扫描包路径:会扫描cn.itsource包及其子包下所有的类,如果类上面有实例化Bean的注解(例如:@Controller),容器就会创建该类的实例,并交给容器管理。否则不创建 -->
<context:component-scan base-package="cn.itsource" />

2.要使用@RequestMapping注解(请求映射注解),就需要配置:

<!-- 开启spring对mvc的支持:即能够使用@RequestMapping注解 -->
<mvc:annotation-driven></mvc:annotation-driven>

6.全注解

  1. Spring不仅支持xml配置,也支持注解配置,使用注解配置会提高开发效率;
  2. SpringMVC中控制器建议使用注解方式,是官方推荐的,外面公司也是使用此方式;
  3. 常用注解分三种:
      (1)第一种:实例化bean的注解
      (2)第二种:注入注解
      (3)第三种:请求映射(匹配)注解

6.1.请求映射(匹配)注解

  1. 请求匹配可以使用@RequestMapping注解实现,该注解可以作用在类上和方法上;
  2. 需要在XML配置Spring对mvc注解支持功能,能识别@RequestMapping:
    <mvc:annotation-driven />

3.指定请求方法:@RequestMapping(value = “/upload”, method = RequestMethod.GET)

6.2.实例化bean的注解

  1. 指定一个包路径,Spring会自动扫描该包及其子包所有类,当发现类定义前有特定的注解标记时,就将该类的对象实例化并纳入到Spring容器中,等价于原有XML配置中定义功能;
  2. 组件扫描可以替代大量XML配置的定义;
  3. 需要在XML配置中指定扫描路径:
    <context:component-scan base-package=“cn.itsource”/>
  4. 以上配置,容器在实例化对象时会自动扫描cn.itsource包及其子包下所有类,如果有多个包可以再写一条;
  5. 指定扫描类路径后,并不是该路径下的所有组件类都扫描到Spring容器的,只有在组件类定义前面有以下标记时,才会扫描到Spring容器;

6.3.注入注解

  1. 具有依赖关系的Bean对象,利用此注解可以实现关系注入:@Autowired、@Resource
  2. 这些注解标记可以用在字段定义或setter方法定义前面,一般用于注入容器中对象,该注解可以直接写在字段上,那么就不需要setter方法了;
    注意:使用该注解之前,一定要确保容器中是否有该类型的对象,否则注入失败;

7.控制器常用操作

控制器除了处理请求并返回视图以外,还需要一些事情,比如接收页面请求参数、绑定数据到页面、返回json数据、文件上传、文件下载等;

7.1.接收请求参数

7.1.1.处理中文参数乱码问题

  1. 参数接收,首先要考虑乱码问题,以前的处理方式是:
    (1)Get请求:tomcat6.x,7.x/conf/server.xml中配置(tomcat8.X不需要配置):
<Connector port="80" protocol="HTTP/1.1" URIEncoding="UTF-8"connectionTimeout="20000"redirectPort="8443" />

(2)Post请求:需要再获取请求参数之前设置编码格式:

req.setCharacterEncoding("utf-8");
  1. 对于Post请求而言,通过上述的方式就需要在每一个控制器都要去处理乱码,有没有更加简洁的办法,只写一次就可以作用在所以在其他控制器呢?

7.1.1.1.过滤器

7.1.1.1.1.过滤器介绍
  1. 生活中的过滤器: 净水器、空气净化器、渔网、烟嘴、塞子;

  2. Filter过滤器是一个对访问的请求和响应进行拦截的web组件;

  3. Filter过滤器可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理;

7.1.1.1.2.过滤器编写
  1. 写一个类去实现Filter接口,并实现接口中的所有方法;
  2. 在web.xml中配置或者使用注解配置【@WebFilter(“过滤器路径”)不推荐】
    Java代码:
public class FirstFilter implements Filter {public FirstFilter() {}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding("utf-8");chain.doFilter(request,response);//放行}public void init(FilterConfig fConfig) throws ServletException {}
}

web.xml配置:

<filter><filter-name>first</filter-name><filter-class>cn.itsource.filter.FirstFilter</filter-class></filter><filter-mapping><filter-name>first</filter-name><url-pattern>/*</url-pattern>  </filter-mapping>

7.1.1.2.配置字符编码过滤器

  1. springmvc框架本身没有处理请求编码,但是spring框架为我们提供了一个编码过滤器。开发者只需要配置一个spring内置请求编码过滤器即可。在web.xml配置一个请求编码过滤器:
<!-- 支持UTF-8编码 -->
<filter><filter-name>characterEncoding</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>characterEncoding</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

7.1.2.参数接收方式

  1. 通过传统的HttpServletRequest接收;
  2. 通过控制器的执行方法的参数接收;
  3. 通过对象来接收;
  4. 通过url中的参数接收(restfull风格) @PathVariable(“id”)转换;

7.1.2.1.通过传统的HttpServletRequest接收

SpringMVC想要使用HttpServletRequest、HttpSession、HttpServletResponse对象可以直接在方法参数中写即可,很强大,需要什么就写什么(只限于普通类加注解的实现方式);

//使用HttpServletRequest接收(不建议使用)
/*** http://localhost/params04?name=admin&age=24*/
@RequestMapping("/params04")
public ModelAndView params04(HttpServletRequest request){System.out.println(request.getParameter("name"));System.out.println(request.getParameter("age"));return null;
}

7.1.2.2.通过参数接收

名称与传递参数一致:

//普通数据接收
/*** http://localhost/params01?name=admin&age=24*/
@RequestMapping("/params01")
public ModelAndView params01(String name,Integer age){System.out.println("name:"+name);System.out.println("age:"+age);System.out.println("xx:"+xx);return null;
}

名称与传递参数不一致:使用@RequestParam(“xxx”)注解

/*** 如果传过来的名称与接收的名称不一致* http://localhost/params02?name=admin&age=24*/
@RequestMapping("/params02")
public ModelAndView params02(@RequestParam("name") String username,Integer age){System.out.println("username:"+username);System.out.println("age:"+age);return null;
}

7.1.2.3.通过对象接收

/** http://localhost/params03?name=admin&age=24&date=2017-05-14*  注意:接收日期必需在 set时间前配置:@DateTimeFormat(pattern="yyyy-MM-dd")*/
@RequestMapping("/params03")
public ModelAndView params03(User user){System.out.println("name:"+user.getName());System.out.println("age:"+user.getAge());System.out.println("date:"+user.getDate());return null;
}

特别注意:在对象部分咱们加了一个日期,而日期格式的数据接收需要加相应的注解:

public class User {private Long id;private String name;private Integer age;private Date date;
//其它的getter,setter省略...@DateTimeFormat(pattern="yyyy-MM-dd")public void setDate(Date date) {this.date = date;}
}

7.1.2.4.URL地址提取数据

使用@PathVariable("id")
/*** 接收url中参数的请求,接收用户请求参数值 * http://localhost/params05/delete/100/tom*  注:这种方式为RESTful风格,参数不易过多*/
@RequestMapping("/params05/delete/{id}/{username}")
public ModelAndView params05(@PathVariable("id")Long id,@PathVariable("username")String name){System.out.println(id);System.out.println(name);return null;
}

7.2.视图解析器

  1. SpringMvc提供了InternalResourceViewResolver,用于统一管理响应视图的匹配;
  2. 使用之后,响应的数据就会交给这个视图解析器进行解析,然后转向响应的页面,控制器中响应视图写法就比较简单了;
 <!-- 设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsps/" /><property name="suffix" value=".jsp" />
</bean>

路径简写:

7.3.向页面传值

传递数据就是Controller往前台(页面)传递数据;

  1. 通过传统的HttpServletRequest传递;
  2. 通过ModelAndView对象传递;
  3. 通过Model对象传递;

7.3.1.通过传统的HttpServletRequest传递

//通过request对象进行数据传递(不建议使用)
@RequestMapping("/data03")
public void data03(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{request.setAttribute("name", "德克儿!");request.getRequestDispatcher("/WEB-INF/jsps/data.jsp").forward(request, response);
}

7.3.2.使用Model方式

//通过model对象进行数据传递
/*** SpringMVC会自动创建模型对象传到方法中,我们只需要往这个模型对象中添加数据即可* 返回值为字符串,我们可以理解为就是一个视图的名称(写路径即可)*/
@RequestMapping("/data01")
public String data01(Model model){model.addAttribute("name","史密斯!");User u = new User();u.setName("张三x");
//添加模型数据,key的值为对象的类型首字母小写model.addAttribute(u);return "/WEB-INF/jsps/data.jsp";
}

7.3.3.通用ModelAndView对象传递

//通用ModelAndView方式
@RequestMapping("/data02")
public ModelAndView data02(){ModelAndView mdv = new ModelAndView();//设置数据到前台mdv.addObject("name", "约什!~");User u = new User();u.setName("张三");//添加模型数据,key的值为对象的类型首字母小写mdv.addObject(u);//视图名称(路径)mdv.setViewName("/WEB-INF/jsps/data.jsp");return mdv;
}

7.4.跳转方式

咱们学习的跳转方式有两种:重定向与请求转发

7.4.1.请求转发:forward

  1. SpringMVC默认就是使用的是转发的方式进行跳转的。上面的案例都是转发,转发的值都是放到request请求作用域,下一个页面可以取出;
  2. Url地址栏中地址不会发生变化;
  3. SpringMVC中使用"forward:/uri"实现转发:
/*** 使用请求转发* @return*/
@RequestMapping("/data05")
public String data5(Model model,HttpSession session){model.addAttribute("test","张三");//可以取出数据session.setAttribute("testsession", "张三session");//可以取出数据return "forward:/data.jsp";
}

7.4.2.请求重定向:redirect

  1. 重定向就是发出一个全新的请求:
      (1)如果把值放到request请求,下一个页面不能取出
      (2)如果把值放到session会话请求,下一个页面可以取出
  2. Url地址栏中地址会发生改变;
  3. SpringMVC中使用"redirect:/uri"即可实现重定向;
@RequestMapping("/data06")
public String data6(Model model,HttpSession session){model.addAttribute("test","张三");//不可以取出数据session.setAttribute("testsession", "张三session");//可以取出数据return "redirect:/data.jsp";
}

7.4.3.注意事项

1.在使用重定向和forward进行转发的时候,是不会经过视图解析器的(默认的转发会经过视图解析器),例如:


8.课程总结

8.1.重点

  1. Controller的实现方式:普通类加注解;
  2. 请求匹配方式:/
  3. 接收请求参数:方法参数接收和对象接收;
  4. 向页面传值:通过Model对象实现;
  5. SpringMvc中的重定向和转发;
  6. 视图解析器的配置;

8.2.难点

  1. SpringMVC相关配置:静态资源访问,开启SppringMvc的注解,扫描包路径等;
  2. 视图解析器的配置;
  3. 控制器常用操作;

8.3.如何掌握

  1. 课上认真听课;
  2. 完成课后练习;
  3. 抓住课程重点;

8.4.排错技巧

  1. 通过异常和错误找出问题,分析问题,解决问题;
  2. 还原代码;
  3. 代码最小化;
  4. 断点;

9.常见问题

  1. No mapping found for HTTP request with URI [/controller3.do] in DispatcherServlet with name ‘dispatcher’
    分析:表示在当前spring的配置中没有找到处理/controller3.do的控制器,springmvc配置不对;
  2. java.lang.ClassNotFoundException: org.springframework.aop.TargetSource
    解决:添加aop的jar文件
  3. HTTP Status 500 - Circular view path [param1]: would dispatch back to the current handler URL [/param1] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
    分析:视图解析器配置出错
<!-- 设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsps/" /><property name="suffix" value=".jsp" />
</bean>

10.课后练习

  1. 课堂代码1-2遍;

11.面试题

  1. Servlet什么时候被实例化?
    答案:Servlet是单例,针对一个tomcat在内存里面只有一个实例。默认在第一次访问的时候实例化,也可以配置到tomcat启动的时候,需要配置:1;
  2. SpringMVC前端控制器配置中"/“与”/*"区别?
  3. SpringMVC与Struts2区别?
    目前企业中使用SpringMVC的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题,下面我们就来对SpringMVC和Struts2进行各方面的比较:
      (1)SpringMVC使用Servlet作为核心控制器,Struts2使用过滤器作为核心控制器;
      (2)SpringMVC是spring中的一个模块,所以spring对于SpringMVC的控制器管理更加简单方便,而且提供了全注解方式进行管理,各种功能的注解都比较全面,使用简单;
    (  3)学习难度:Struts有很多新的技术点,比如拦截器、值栈及OGNL表达式,学习成本较高。SpringMVC比较简单,和容易上手;
      (4)开发效率SpringMVC要比struts2高;
      (5)SpringMVC操作json比较简单,一个注解就可以实现;
      (6)struts2 好处:内置插件比较多;

12.扩展知识或课外阅读推荐(可选)

12.1.扩展知识

12.2.课外阅读

javaweb实训第五天下午——SpringMVC基础相关推荐

  1. javaweb实训第五天下午——xml配置文件约束报错问题

    spring框架中xml配置文件约束报错问题 问题描述: 问题描述: 如果电脑连不上网,或者网速不好可能会造成Spring框架中xml配置文件出现错误.但是这个错误不影响项目的运行的: <bea ...

  2. javaweb实训第五天上午——Spring基础

    Spring基础 1.课程介绍 2.为什么需要Spring 3.初识Spring 3.1.什么是Spring 3.2.Spring框架的好处 3.3.Spring框架的模块化 4.Spring入门 4 ...

  3. javaweb实训第三天下午——Web基础-Servlet交互JSP原理及运用

    1.课程介绍 Servlet三大职责: (掌握) Servlet重定向和请求转发: (掌握) JSP介绍: (了解) JSP语法: (掌握) JSP三大指令: (掌握)) JSP九大内置对象: (了解 ...

  4. javaweb实训第四天上午——MySQL基础

    目录 1 课程介绍 2 数据库概述 2.1 数据库概念 2.2 数据库的由来和发展 2.3 常见的==关系型数据==库服务器(DBMS) 2.4 SQL概述 2.5 表的概念(table) 3 数据库 ...

  5. [JavaWeb实训Day4]__jsoup爬虫(爬新闻页面)词云的生成( kumo库)

    目录 一.本次实验分析过程 二.Jee连接MySQL数据库 三.异步传值及界面设计 四.jsoup爬虫爬取新闻网页 五.新闻词云的生成( kumo库) 六.存入数据库 快速链接:[JavaWeb项目实 ...

  6. JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)

    JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...

  7. java web开发实训心得,【JavaWeb实训心得体会材料】

    JavaWeb实训心得体会材料 <JavaWeb实训心得体会材料.doc>由会员分享,可免费在线阅读全文,更多与<JavaWeb实训心得体会材料>相关文档资源请在帮帮文库(ww ...

  8. 实训第五天:播放器现目的实现

    实训第五天:播放器现目的实现 用的框架:jquery mobile 移动端 技术: 图标:九宫格 列表:jqm总共3个文件 引入css的样式文件,直接使用,用link标签 <link rel=& ...

  9. [JavaWeb实训Day3]__button_框架布局点击事件

    目录 一.基于JavaScript框架布局 二.button设置id 样式 三.button点击事件 快速链接:[JavaWeb项目实训]--总目录 我的运行环境在前面博客提到过,这里是在wc1项目下 ...

最新文章

  1. Java反射以及应用
  2. cmake find_package opencv 找不到
  3. Android Studio 权威教程
  4. python自媒体创作_做自媒体该做什么领域?
  5. 牛客网 PAT 算法历年真题 1003: 数素数 (20)
  6. 金币(信息学奥赛一本通-T1100)
  7. day7 java的构造器
  8. GPU Raycasting的两种实现方法
  9. Python获取局域网内所有机器IP地址与网卡MAC地址
  10. Js获取file上传控件的文件路径总结
  11. poj 2559 Largest Rectangle in a Histogram dp!!!
  12. 浅析bin,lib,src的区别
  13. kettle 4.4源代码分析Transformation
  14. word文档删除空白页,选中空白页面按住 delete
  15. csv文件超过104万数据怎么办
  16. ubuntu开启客户端nfs服务_ubuntu16.04搭建nfs服务的方法
  17. 【转】Arp的攻防实战
  18. JavaScript浮动广告
  19. Hibernate 列映射 – 解决其他类型映射命名冲突
  20. win10如何修改计算机管理员的名字,hp win10系统管理员名称改了后怎么改回去

热门文章

  1. 剑指Offer之数组中重复的数字
  2. 2021-2025年中国电动多用途越野车(UTV)行业市场供需与战略研究报告
  3. 三条中线分的六个三角形_三角形中的边长和线段(下)
  4. java servlet spring_带着新人简单看看servlet到springmvc
  5. “三行代码,确实需要耗上一整天”
  6. 区块链只能算半个“信任机器”,隐私计算才是真正的信任机器?
  7. Java 和 Python 并列第二、Julia 下滑,揭晓 RedMonk 最新编程语言榜单!
  8. Google 高薪争夺 Rust 人才,将用 Rust 重构关键组件!
  9. 长肥管道(LFT)中TCP的艰难处境与打法
  10. 面试常考,项目易错!C/C++中的字节对齐