-
web-INF 目录下为私有文件
查看全部 -
视图层:为用户提供UI,重点关注业务的呈现。
模型层,业务数据的信息表示,关注支撑业务的信息构成,通常是多个业务实体的组合。
Controller 调用业务逻辑产生合适的数据。
查看全部 -
Spring MVC基本概念
查看全部 -
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>imcc-zyh</groupId>
<artifactId>spring-mvc-demo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>spring-mvc-demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<commons-lang.version>2.6</commons-lang.version>
<slf4j.version>1.7.6</slf4j.version>
<spring.version>4.1.3.RELEASE</spring.version>
</properties>
<!-- 依赖管理, 管理传递依赖, 比如两个工程依赖的spring 包版本不一致, 可以通过依赖管理来指定 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.2.v20140723</version>
</plugin>
</plugins>
</build>
</project>
查看全部 -
SpringMVC中启动对JSON的支持:
步骤1:SpringMVC的上下文环境mvc-dispatcher-serlver.xml中配置ContentNegotiatingViewResolver,具体参数不做详细讲解,只需要知道它可以将SpringMVC相同的数据呈现不同的数据表现形式,由于这里主要讲解JSON数据格式,这里使用MappingJackson2JsonView工具类库,将模型数据转化称JSON格式。如下图配置,其中JsonView类的作用是将模型数据转化成JSON格式。
步骤2:Maven的pom文件引入依赖,使用jackson提供工程的javaBean的JSON的转换。
案例:Controller中编写支持JSON的方法,其它同之前课程一样,只不过方法的返回参数Course前添加了@ResponseBody注解(并不是唯一的方式,它是简洁的方式,不需要其他配置),返回的数据将以JSON格式进行呈现,可以把数据复制到具有JSON功能的文本编辑器,并使用JSON的视图进行展示。数据转换为JSON的格式2:方法返回值前使用@ResponseEntity注解(该注解是SpringMVC抽象的实体,它用泛型包裹了实体类),只需要返回这个类的实例。如下图(了解)
查看全部 -
SpringMVC协同JSON工作
JSON(JavaScript Object Notation)定义:轻量级的数据交换格式,SpringMVC协同JSON使得模型数据在前端具有不同的表现形式。JSON在Restful Web Service中发挥重要作用,也使得Restful Web Service 称为Web Service的一种标准。
SpringMVC处理JSON的方式:使用ContentNegotiatingViewResolver的机制处理相同数据不同呈现方式要求的应用场景,使用ViewResolver处理数据的不同呈现格式,如果需要HTML的数据呈现格式,它就会把数据代理给JSPView,如果需要JSON数据格式,它就把数据代理给JsonView。
SpringMVC看待JSON方式:数据格式没有改变,改变的只是数据的呈现方式。
查看全部 -
repository:.容器;仓库
查看全部 -
maven 中的坐标包含 groupId,artifactId,version,packaging。这四个方面可以唯一确定我们需要的产品以及包
查看全部 -
SpringMVC中启动对JSON的支持:
步骤1:SpringMVC的上下文环境mvc-dispatcher-serlver.xml中配置ContentNegotiatingViewResolver,具体参数不做详细讲解,只需要知道它可以将SpringMVC相同的数据呈现不同的数据表现形式,其中JsonView类的作用是将模型数据转化成JSON格式。
步骤2:Maven的pom文件引入依赖,提供工程JSON的转换。
案例:Controller中编写支持JSON的方法,其它同之前课程一样,只不过方法的返回参数Course前添加了@ResponseBody注解(并不是唯一的方式,它是简洁的方式,不需要其他配置),返回的数据将以JSON格式进行呈现,可以把数据复制到具有JSON功能的文本编辑器,并使用JSON的视图进行展示。数据转换为JSON的格式2:方法返回值前使用@ResponseEntity注解,并添加泛型,只需要返回这个类的实例。如下图(了解)
查看全部 -
FileUpload——单文件上传(SpirngMVC提供了文件上传的支持,通过配置,就可以使用SpringMVC提供的接口来完成文件的上传)
配置:在SpringMVC的上下文环境mvc-dispatcher-servlet.xml中添加一个<bean>如下图,其中CommonsMultpartResolver是解析上传文件的类,它其中的属性maxUploadSize,是用来限制上传文件的大小,并设置大小为200兆的字节(209715200),默认编码属性defaultEncoding选用UTF-8,属性resolveLazily为是否使用延迟加载,这里值为true,使用延迟加载提高性能,在需要时才进行文件上传的解析,并在依赖管理中引入这个commons-fileupload的jar包,并且该jar包依赖commons-io的jar包(隐性的引入了该jar包),正好编码中也是用到了这个io包,这里就不用显示的引入它了。
书写Controller:提供一个名为showUploadPage()方法,该方法用于跳转到下载文件的界面,跳转的JSP界面提供了一个form表单,表单包含input的类型为file的标签和input的类型为submit的标签,表单form中加入一个enctype属性,值为multipart/form-data,该属性是文件上传必须要显示指明的一个属性,如果没有该属性无法完成文件上传,form表单的action属性值为/courses/doUpload,所以要在CourseController中提供一个方法,并且文件上传通常指明它是通过POST方式传递过来,RequestMapping(value="doUpload",method=RequestMethod.POST),在方法的参数里使用到了SpringMVC提供的支持文件上传的类(MultipartIFile),可以查看该类的源代码(可以上网查阅如何查看Maven下的源代码),MuilipartFile提供了一些方法来访问文件,比如,获取文件名、获取文件的最初文件名(也就是本地文件名)、获取文件类型、查看该文件是否是空文件、文件大小以及文件二进制、还可以获取它的流进行读取操作,如下图二,并且这里使用@RequestParam("file")使表单的file的input标签与该方法参数相关联,这样SpringMVC就会将input的name为file的元素值绑定到Controller的参数上,并且类型会转换成MultipartFile,接下就需要把服务器传过来的文件存储在某个地方,以提供其他应用所使用,这里把它拷贝到C盘的目录(C:\temp\imooc),如果文件不为空,输出日志信息和本地文件名字,FileUtils是Commons-io的一个文件类,可以用它的copyInputStreamToFile做文件的拷贝和文件流的操作,该方法有两个参数,第一参数是源文件所代表的流(InputStream类型,这里使用MultipartFile的getInputStream()获取该流),第二个参数是File类型,并且File的第一个参数是目标地,第二个是文件名,这里必须+文件的原始名称,否则报错。
查看全部 -
Binding:将请求中的字段按照名字匹配的原则填入对象模型(模型对象和页面数据的绑定)。
案例:课程添加及保存的维护界面。
描述:创建增加课程的方法,并跳转课程增加的界面,设定访问该方法的路径为admin,请求限定为request,限制有一个请求参数add(意思是浏览器访问时候路径后+?add),注意:edit.jsp中标签的name属性应当和模型对象中的Course属性名称一致,
随后Controller中添加增加课程的方法,该方法通过在方法里设置Course对象来获取前端form表单提交的数据,这里通过返回"redirect:view2/"+course.getCourseId();就可以重定向到viewCourse2的方法并进行添加课程的展示,添加日志信息确定是否拦截到了表单的数据信息,并把它绑定到了模型对象中log.debug("Info of Course:");log.debug(ReflectionToStringBuilder.toString(course)),ReflectionToStringBuilder是apache.lang包中Builder的一个类,进行日志输出进行程序的调试很常见,将课程的内容以键值对的形式,输出在日志当中,这样就可以查看是否映射到了Course对象中。
映射多目录结构JSP:相对路径即可。
@ModelAttribute:放在方法参数的注解,也可以完成数据绑定的功能,当@ModelAttribute放在方法参数上时,和使用这个标签没有区别。当将@ModelAttribute放在方法上标识的时候,表示执行这个controller类中的@RequestMapping标注的方法前都要先执行标有@ModelAttribute的方法。
查看全部 -
Controller——传统方式
Controller中使用HttpServletRequest对象(方法中使用HttpServletRequest对象)
【步骤1】pom文件中引入Servlet的API
【步骤2】通过request把逻辑数据放入域对象request对象中
课程总结:
1、通过@Controller的annotation声明了一个Controller
2、通过@RequestMapping的annotation映射了URL和方法,通常出现在类级别和方法级别,二者共同组合完成了对一个URL映射请求的拦截。
3、通过URL template结合使用(@Requestparam and @PathVariable)两个标记可以将URL路径之中的参数绑定到方法参数中
4、可以通过使用HttpServletRequest或者HttpSession之类的对象来获取想要的结果。
查看全部 -
Controller——现代方式
通过注解SpringMVC可以识别Controller,并且将请求映射到正确的方
法。
【步骤1】:通知SpringMVC的DispatcherServlet这是一个Controller,所以在类上添加@Controller,这样它就会被DispatcherServlet上下文环境管理,并且完成它的依赖注入。
【步骤2】:指明该Controller负责处理哪一个URL,通过添加@RequestMapping("/courses"),它处理Controller负责处理根URL,也就是courses下的路径都会被它拦截到。
【步骤3】:指明映射到哪一个方法,所以在相应方法上添加注解@RequestMapping(value="/view",method=RequestMethod.GET),同时可以限制从get方法过来的请求。
【步骤4】处理前端传过来的参数,第一种方式:也就是get请求带了一个参数courseId=123,它需要被方法所识别,这里在方法的参数上绑定annotation,属性就是前端传过来的key(courseId)的名,通过在方法参数前使用@RequestParam("courseId"),这里可以通过日志查看绑定数据的行为(log.debug("In viewCourse,courseId={}",courseId)
解决不能再JSP页面引入JSTL的原因?
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
第二种方式:绑定路径参数,这里使用@PathVariable("course"),要在URL路径中显示声明这个路径,也就是在@RequestMapping注解的value属性中,在路径后使用/{courseId}花括号括起来表示一个路径变量。
例如访问路径:http://localhost:8080/view2/courseId=123
查看全部 -
Controller——基础代码
根据课程的ID查询某一个课程的详情
创建名称为CourceController,首先有个依赖CourseService来完成课程查询的业务逻辑功能,并且通过@Autowired对其进行自动注入,之后可以添加日志,在pom中添加日志的依赖,private static Logger log=LoggerFactory.getLogger(CourseController.class),调用业务逻辑方法完成ID的查询,所以提供一个方法,传入课程ID和SpringMVC提供特有的类型Model,然后再向Model中添加模型对象,调用CourseService的逻辑方法,并把返回的对象通过Model的addAttribute(course),前端页面EL表达式的对象名就是course,就可以通过该对象进行取属性,由于使用了SpringMVC的InternalResourceViewResolver,所以返回的时候只需要给定jsp的名字即可如下图。
查看全部 -
用Spring MVC开发一个课程管理模块
配置文件:
【配置1】——web应用的部署描述文件web.xml,当前的web.xml是由maven自动生成的,它用到web-app_2_3的版本,这个标准之下,JSP页面会默认将EL表达式语言关闭,所以要将它替换掉,使用web_app_2_4以上版本,如下图,这样Web应用就可以使用EL表达式。
【配置2】——web.xml中加入Spring和SpringMVC的声明,以及所需Spring配置文件和SpirngMVC所需路径,如下图,所以现在有两个上下文环境一个是SpringMVC的上下文环境,一个是Spring的上下文环境(提供了所有应用公共使用的一些组件、一些服务,有service层、dao层等等,这些服务是被整个应用所共享的,没有局限在某一个DispatcherServlet上下文环境之中),另外一个则是与DispatcherServlet上下文相关的WebApplicationContext上下文,该上下文包含Controllers、HandlerMapping、ViewResolver,这里通常指的是配置文件,可以有多个DispatcherServlet,多个DispatcherServlet可以使用公共的WebApplicationContext,可以使用不同的DispathcerServlet进行不同的分发,更好进行不同类型的请求。
【配置3】——DispatcherServlet配置文件的配置。
【配置4】——Spring配置文件的配置。
查看全部
举报