spring mvc

ssm=spring mvc+spring +mybatis

spring mvc工作流程

1A)客户端发出http请求,只要请求形式符合web.xml文件中配置的*.action的话,就由DispatcherServlet来处理。

1B)DispatcherServlet再将http请求委托给映射器的对象来将http请求交给对应的Action来处理

2)映射器根据客户的http请求,再对比<bean name="/hello.action如果匹配正确,再将http请求交给程序员写的Action

3)执行Action中的业务方法,最终返回一个名叫ModelAndView的对象,其中封装了向视图发送的数据和视图的逻辑名

4)ModelAndView对象随着响应到到DispatcherServlet中了

5)这时DispatcherServlet收到了ModelAndView对象,它也不知道视图逻辑名是何意,又得委托一个名叫视图解析器的对象去具体解析ModelAndView对象中的内容

6)将视图解析器解析后的内容,再次交由DispatcherServlet核心控制器,这时核心控制器再将请求转发到具体的视图页面,取出数据,再显示给用户

XML实现spring mvc

开发步骤:

注意:使用的spring framework版本是:4.2.5

1.引入jar包:

spring核心包

commons-logging-1.1.3.jar
spring-beans-4.2.5.RELEASE.jar
spring-context-4.2.5.RELEASE.jar
spring-core-4.2.5.RELEASE.jar
spring-expression-4.2.5.RELEASE.jar

spring mvc包

spring-web-4.2.5.RELEASE.jar
spring-webmvc-4.2.5.RELEASE.jar

2.xml配置

web.xml配置

配置spring mvc核心控制器

解决提交表单中文乱码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6.  
  7. <!-- 注册springmvc核心控制器-->
  8. <servlet>
  9. <!--servlet-name的值对应一个文件:/WEB-INF/DispatcherServlet-servlet.xml -->
  10. <servlet-name>springmvc</servlet-name>
  11. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  12. <init-param>
  13. <!-- 指定application.xml文件 -->
  14. <param-name>contextConfigLocation</param-name>
  15. <param-value>classpath:springmvc.xml</param-value>
  16. </init-param>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>springmvc</servlet-name>
  20. <url-pattern>*.action</url-pattern>
  21. </servlet-mapping>
  22.  
  23. <!--spring编码过滤器:解决POST提交中文乱码问题-->
  24. <filter>
  25. <filter-name>CharacterEncodingFilter</filter-name>
  26. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  27. <init-param>
  28. <param-name>encoding</param-name>
  29. <param-value>utf-8</param-value>
  30. </init-param>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>CharacterEncodingFilter</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>
  36.  
  37. </web-app>

springmvc.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:mvc="http://www.springframework.org/schema/mvc"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop.xsd
  15. http://www.springframework.org/schema/tx
  16. http://www.springframework.org/schema/tx/spring-tx.xsd
  17. http://www.springframework.org/schema/mvc
  18. http://www.springframework.org/schema/tx/spring-mvc.xsd
  19.  
  20. ">
  21.  
  22. <!-- 1.注册Action(必须配置) -->
  23. <bean name="/hello.action" class="com.eggtwo.action.HelloController"></bean>
  24.  
  25. <!--2.映射器:如果将bean标签的name属性值作为请求URL.此标签可以省略-->
  26. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
  27.  
  28. <!--3.适配器:实现了Controller接口的适配器,默认可省略-->
  29. <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
  30.  
  31. <!--4.视图解析器-->
  32. <!--
  33. 如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
  34. 如果Action中书写的是视图真实名称,那么视图解析器就不能配置
  35. -->
  36. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  37. <!-- 路径前缀 -->
  38. <property name="prefix" value="/WEB-INF/jsp/"/>
  39. <!-- 路径后缀 -->
  40. <property name="suffix" value=".jsp"/>
  41. <!-- 前缀+视图逻辑名+后缀=真实路径 -->
  42. </bean>
  43. </beans>

3.编写Action

  1. package com.eggtwo.action;
  2.  
  3. import org.springframework.web.bind.annotation.InitBinder;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.Controller;
  6.  
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.lang.annotation.Annotation;
  10.  
  11. public class HelloController implements Controller {
  12. @Override
  13. public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
  14. ModelAndView modelAndView = new ModelAndView();
  15. modelAndView.addObject("message", "这是我的第二个springmvc应用程序,视图使用逻辑名");
  16.  
  17. //原来封装视图的真实路径
  18. // modelAndView.setViewName("/WEB-INF/jsp/success.jsp");
  19.  
  20. String name = request.getParameter("name");//获取表单提交的数据
  21. System.out.println("姓名:"+name);
  22.  
  23. //现在封装视图的逻辑名称
  24. modelAndView.setViewName("success");
  25.  
  26. return modelAndView;
  27. }
  28.  
  29. }

注解实现spring mvc

解决的问题:

1.一个controller中放置多个action

2.获取get/post请求的参数(action接收的string类型的date参数怎么转成date)

3.限定action只能接收一种请求方式(get/post)

4.解决表单提交的中文乱码

5.在action中获取request/response

6.在action中重定向

7.action返回值类型(返回html、string、json、file等等)

8.在action中获取request

1.引入jar包:

spring核心包

commons-logging-1.1.3.jar
spring-beans-4.2.5.RELEASE.jar
spring-context-4.2.5.RELEASE.jar
spring-core-4.2.5.RELEASE.jar
spring-expression-4.2.5.RELEASE.jar

spring aop包(注解会使用到aop)

aopalliance.jar
aspectjrt.jar
aspectjweaver.jar
spring-aop-4.2.5.RELEASE.jar

spring mvc包

spring-web-4.2.5.RELEASE.jar
spring-webmvc-4.2.5.RELEASE.jar

2.配置XML:

web.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6.  
  7. <!-- 注册springmvc核心控制器-->
  8. <servlet>
  9. <!--servlet-name的值对应一个文件:/WEB-INF/DispatcherServlet-servlet.xml -->
  10. <servlet-name>springmvc</servlet-name>
  11. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  12. <init-param>
  13. <!-- 指定application.xml文件 -->
  14. <param-name>contextConfigLocation</param-name>
  15. <param-value>classpath:spring_annotation.xml</param-value>
  16. </init-param>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>springmvc</servlet-name>
  20. <url-pattern>*.action</url-pattern>
  21. </servlet-mapping>
  22.  
  23. <!--spring编码过滤器:解决POST提交中文乱码问题-->
  24. <filter>
  25. <filter-name>CharacterEncodingFilter</filter-name>
  26. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  27. <init-param>
  28. <param-name>encoding</param-name>
  29. <param-value>utf-8</param-value>
  30. </init-param>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>CharacterEncodingFilter</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>
  36.  
  37. </web-app>

spring  mvc xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:mvc="http://www.springframework.org/schema/mvc"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/aop
  14. http://www.springframework.org/schema/aop/spring-aop.xsd
  15. http://www.springframework.org/schema/tx
  16. http://www.springframework.org/schema/tx/spring-tx.xsd
  17. http://www.springframework.org/schema/mvc
  18. http://www.springframework.org/schema/tx/spring-mvc.xsd
  19.  
  20. ">
  21. <!--让spring ioc去扫描具体包下的所有具有注解@Controller的类-->
  22. <context:component-scan base-package="com.eggtwo.action"></context:component-scan>
  23.  
  24. <!--注解映射器:可省略-->
  25. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
  26.  
  27. <!--视图解析器-->
  28. <!--
  29. 如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
  30. 如果Action中书写的是视图真实名称,那么视图解析器就不能配置
  31. -->
  32. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  33. <!-- 路径前缀 -->
  34. <property name="prefix" value="/WEB-INF/jsp/"/>
  35. <!-- 路径后缀 -->
  36. <property name="suffix" value=".jsp"/>
  37. <!-- 前缀+视图逻辑名+后缀=真实路径 -->
  38. </bean>
  39. </beans>

3.开发controller 和action:

  1. package com.eggtwo.action;
  2.  
  3. import com.eggtwo.entity.Student;
  4. import com.sun.org.apache.regexp.internal.RE;
  5. import org.springframework.beans.propertyeditors.CustomDateEditor;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.Model;
  8. import org.springframework.web.bind.ServletRequestDataBinder;
  9. import org.springframework.web.bind.WebDataBinder;
  10. import org.springframework.web.bind.annotation.InitBinder;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestMethod;
  13. import org.springframework.web.context.request.WebRequest;
  14.  
  15. import javax.servlet.http.HttpServletRequest;
  16. import java.text.DateFormat;
  17. import java.text.SimpleDateFormat;
  18. import java.util.Date;
  19.  
  20. /**
  21. * 此控制器是单例模式,构造函数只执行一次
  22. * 注解控制器
  23. */
  24. @Controller
  25. @RequestMapping(value = "/anno")
  26. public class AnnotationController {
  27.  
  28. public AnnotationController() {
  29. System.out.println("AnnotationController()");
  30. }
  31.  
  32. @RequestMapping(value = "/login.action")
  33. public String login(Model model) {
  34. model.addAttribute("message", "第一个注解实现的spring mvc login");
  35. return "success";//逻辑名称,需要配置视图解析器
  36. //return "/WEB-INF/jsp/success.jsp";
  37.  
  38. }
  39.  
  40. /**
  41. * 设置请求的url,接收参数的方式,请求的方式(get/post)(默认get/post请求都支持)
  42. */
  43. @RequestMapping(value = "/register1.action", method = {RequestMethod.POST, RequestMethod.GET})
  44. public String register1(Model model, String name, int age, boolean man) {
  45.  
  46. model.addAttribute("message", "注册成功");
  47. return "success";
  48. // return "/WEB-INF/jsp/success.jsp";
  49.  
  50. }
  51.  
  52. /**
  53. * 请求url中的.action可以省略
  54. */
  55. @RequestMapping(value = "/register", method = RequestMethod.POST)
  56. public String register(Model model, Student student) {
  57. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  58.  
  59. System.out.println(student.getBirthday());
  60. model.addAttribute("message", "注册成功");
  61. model.addAttribute("student", student);
  62.  
  63. return "success";
  64. // return "/WEB-INF/jsp/success.jsp";
  65.  
  66. }
  67.  
  68. /**
  69. * 日期类型转换器
  70. *
  71. * @param binder
  72. */
  73. @InitBinder
  74. public void initBinder(WebDataBinder binder) {
  75. //设置什么类型的时间格式可以转
  76. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  77. dateFormat.setLenient(false);
  78. binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));//true:允许为空, false:不允许为空
  79. }
  80. }

3.1action向view视图(jsp页面传值)

  1. @RequestMapping(value = "/register", method = RequestMethod.POST)
  2. public String register(Model model, Student student) {
  3. model.addAttribute("message", "注册成功");
  4. model.addAttribute("student", student);
  5. return "success";
  6.  
  7. }

3.2指定action加载返回的视图(jsp页面)

指定物理视图名称:

  1. return "/WEB-INF/jsp/success.jsp";

指定逻辑视图名称:

  1. return "success";

逻辑视图需要在spring mvc文件配置视图解析器

  1. <!--视图解析器-->
  2. <!--
  3. 如果Action中书写的是视图逻辑名称,那么视图解析器就必须配置
  4. 如果Action中书写的是视图真实名称,那么视图解析器就不能配置
  5. -->
  6. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  7. <!-- 路径前缀 -->
  8. <property name="prefix" value="/WEB-INF/jsp/"/>
  9. <!-- 路径后缀 -->
  10. <property name="suffix" value=".jsp"/>
  11. <!-- 前缀+视图逻辑名+后缀=真实路径 -->
  12. </bean>

4.URL配置:

在controller和请求action上配置

  1. @RequestMapping(value = "/anno")

5.请求方式配置:

  1. @RequestMapping(value = "/register1.action", method = {RequestMethod.POST, RequestMethod.GET})
  1. @RequestMapping(value = "/register", method = RequestMethod.POST)

如果不配置method,默认支持所有请求方式

6.请求参数接收:

1.变量直接接收:方法的变量名要和表单的name值保持一致,多用于get查询请求

  1. @RequestMapping(value = "/register1.action", method = {RequestMethod.POST, RequestMethod.GET})
  2. public String register1(Model model, String name, int age, boolean man) {
  3.  
  4. model.addAttribute("message", "注册成功");
  5. return "success";
  6. // return "/WEB-INF/jsp/success.jsp";
  7.  
  8. }

2.模型绑定接收:方法的变量名要和表单的name值保持一致,可以设置多个模型,多用于表单提交

  1. @RequestMapping(value = "/register", method = RequestMethod.POST)
  2. public String register(Model model, Student student) {
  3. System.out.println(student.getBirthday());
  4. model.addAttribute("message", "注册成功");
  5. model.addAttribute("student", student);
  6.  
  7. return "success";
  8. // return "/WEB-INF/jsp/success.jsp";
  9.  
  10. }

3.数组参数接收:批量删除时用于接收ids,批量添加

ids为checkbox的名称

  1. @RequestMapping(value = "/batchDelete.action")
  2. public String register(Model model, Integer[] ids) {
  3. for(int id :ids){
  4. System.out.println(id);
  5. }
  6. return "success";
  7.  
  8. }

4.接收List<javaBean>集合

7.内部转发和重定向

内部 转发,url不变:可以使用model在多个action中传值,因为model是request域对象

  1. @RequestMapping(value = "/forward.action")
  2. public String forward(Model model) {
  3. return "forward:/anno/login.action";
  4. }

URL重定向,以url后缀的方式进行传值

  1. @RequestMapping(value = "/go.action")
  2. public String go(Model model) {
  3. return "redirect:/anno/login.action?id=3";
  4. }

8.action返回json和字符串

第一步:导入json包

jackson-annotations-2.6.0-xh.jar

jackson-core-2.6.0-xh.jar

jackson-databind-2.6.0-xh.jar

jackson-jr-all-2.4.3-xh.jar

第二步:在action请求方法上使用@ResponseBody注解表示该方法的返回值放在响应体(Response Body)返回给用户

第三步:在springmvc xml文件中配置json解析适配器

  1. <!-- 注册json解析适配器 -->
  2. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  3. <property name="messageConverters">
  4. <list>
  5. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
  6. </list>
  7. </property>
  8. </bean>

第四步:开发action

返回json

  1. @RequestMapping(value = "/getJson.action")
  2. @ResponseBody
  3. public Student getJson() {
  4. Student student = new Student();
  5. student.setName("测试");
  6. student.setMan(true);
  7. student.setBirthday(new Date());
  8. student.setAge(14);
  9. student.setScore(12.254);
  10. return student;
  11. }

返回字符串

  1. @RequestMapping(value = "/getString.action",method = RequestMethod.GET)
  2. @ResponseBody
  3. public String getString() {
  4. return "直接返回字符串";
  5. }

9.在action中获取当前请求的request

在controller中添加如下特性:可以放在baseController

  1.  
  1. @Autowired
  2. protected HttpServletRequest request; //自动注入request
  1.  

java web开发入门六(spring mvc)基于intellig idea的更多相关文章

  1. 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener

    [Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...

  2. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  3. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  4. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

  5. 【Java Web开发学习】Spring MVC异常统一处理

    [Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...

  6. 【Java Web开发学习】Spring MVC 开始配置

    Spring MVC 开始配置 转载:http://www.cnblogs.com/yangchongxing/p/8871370.htm 学习搭建最简单的Spring MVC框架. ======== ...

  7. 【Java Web开发学习】Spring MVC整合WebSocket通信

    Spring MVC整合WebSocket通信 目录 ========================================================================= ...

  8. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  9. 【Java Web开发学习】Spring JPA

    [Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...

随机推荐

  1. vue+django分离开发的思想和跨域问题的解决

    一.介绍 在前后端分离的开发过程中,会涉及到跨域的问题,比如本次个人使用的Django+vue的框架,在vue对Django进行响应,Django再将响应的数据返回给vue,vue在进行渲染,如果不设 ...

  2. 什么是code-Behind技术?

    code-Behind技术就是代码隐藏(代码后置),在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建. 比如分工,美工和编程的可以个干各 ...

  3. DevExpress的TreeList怎样设置数据源,从实例入手

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  4. docker 制作一个容器,并上传到仓库

    创建镜像的三种方法 1.基于已有的镜像的容器创建 启动一个容器并修改容器: docker run -it ubuntu:latest /bin/bash touch test 提交创建新镜像并查看制作 ...

  5. Linux kali信息探测以及 Nmap 初体验

    Nmap是一个开源的网络连接端口扫描软件(内置于kali中) 打开Nmap: > nmap 打开桌面化Nmap——zenmap: > zenmap Nmap支持多种扫描方式,用法简单,参数 ...

  6. 【转载】Gradle for Android 第二篇( Build.gradle入门 )

    理解Gradle脚本 当然我们现在讨论的所有内容都是基于Android studio的,所以请先行下载相关工具.当我们创建一个新的工程,Android studio会默认为我们创建三个gradle文件 ...

  7. 详解Vue的slot新用法

    摘要: 理解Vue插槽. 作者:前端小智 原文:vue 2.6 中 slot 的新用法 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 最近发布不久的Vue ...

  8. Linux framebuffer deferred io机制【转】

    转自:https://www.cnblogs.com/vedic/p/10722514.html 一.总体框架 deferred io机制主要用于驱动没有实现自刷新同时应用层又不想调用FBIOPAN_ ...

  9. C++和C的相互调用

    C++和C相互调用实际工程中C++和C代码相互调用是不可避免的C++编译器能够兼容C语言的编译方式C++编译器会优先使用C++编译的方式extern关键字能强制让C++编译器进行C方式的编译 exte ...

  10. pikachu的xss及csrf

    一.XSS 可解析的js 未经过滤 XSS见框就插     script 大小写  中间插入 <img src="" onerror="alert(11111)&q ...