Spring MVC相关杂项知识记录-20170326备课笔记
2017-03-28 08:40
465 查看
Spring MVC+Spring+JDBC框架搭建
加入jar文件配置文件
Spring配置文件—-applicationContext-jdbc.xml
如果有多个分包,可以分几句写
<context:component-scan package="要扫描的包的绝对路径" />
Spring MVC配置文件—-springmvc-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" 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"> <!-- 启动了控制器(controller)的注解功能 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 完成Controller返回(return)的逻辑路径名称的拼接 InternalResourceViewResolver:专门用于JSP或HTML路径解析的 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- prefix:前缀 之所以要放到WEB-INF下,是为了提高网站访问的安全性 因为WEB-INF下的文件无法通过浏览器直接访问 --> <property name="prefix" value="/WEB-INF/pages/"></property> <!-- 后缀不能是.html,只能是.jsp --> <property name="suffix" value=".jsp"></property> </bean> <context:component-scan base-package="cn.worktogether.controller"> <!-- 由于Spring与Spring MVC均使用同一种方法扫描Bean,将Bean实例化到IoC容器中 所以,在写扫描时,注意不要重复扫描!可使用过滤的方式,指定扫描的注解来解决重复扫描问题 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>worktogether2</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> <!-- Spring IoC容器的配置文件位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- log4配置文件位置 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <!-- 用于在项目启动时加载Spring Ioc容器的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 用于启动log4j的监听器 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- SpringMVC启动的配置 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- spring MVC的配置文件读取 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <!-- 让服务器启动时就加载 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 指定任何请求到这个项目的链接首先接给DispatherServlet --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 解决中文乱码 --> <filter> <filter-name>encoding</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>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
database.properties
driver=com.mysql.jdbc.Driver #在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8 url=jdbc:mysql://127.0.0.1:3306/worktogether?useUnicode=true&characterEncoding=utf-8 user=mm password=123456
log4j.properties
################################################################## #基本配置:输出等说明 ################################################################## log4j.rootLogger=DEBUG,CONSOLE,File #log4j.rootLogger=ERROR,ROLLING_FILE log4j.logger.cn.smbms.dao=debug log4j.logger.com.ibatis=debug log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug log4j.logger.java.sql.Connection=debug log4j.logger.java.sql.Statement=debug log4j.logger.java.sql.PreparedStatement=debug log4j.logger.java.sql.ResultSet=debug log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug ###################################################################################### # Console Appender 控制台输出说明 ###################################################################################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=error log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %m %d - %c%n ###################################################################################### # DailyRolling File 文件输出说明 ###################################################################################### log4j.appender.File=org.apache.log4j.DailyRollingFileAppender log4j.appender.File.DatePattern=yyyy-MM-dd log4j.appender.File.File=log.log log4j.appender.File.Append=true log4j.appender.File.Threshold=info log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n log4j.logger.com.opensymphony.xwork2=error
改造DAO层
Repository
改造Service层
@Service/@Resource
改造Controller层
创建UserController,实现业务功能
改造View层
静态资源文件
用户页面
Spring MVC跳转
默认为服务器内的转发。也可以使用forward:前缀转发信息,并非重新请求
如果需要重定向,则在return时加”redirect:”前缀
重新发送URL请求
静态资源引用(JS,CSS)
方法一:SpringMVC-servlet.xml中加入如下代码这样做的好处在于可以把所有静态资源都放到WEB-INF文件夹下面
可能需要一个总的文件夹(下面代码中使用了statics)把所有资源均在下面
<mvc:resources location="/WEB-INF/statics/" mapping="/**" />
方法二:SpringMVC-servlet.xml中加入如下代码
这样做的好处在于不用动原来已经存在的静态资源文件,适合于项目升级改造。
静态资源不能在WEB-INF下面
需要与联合使用,否则无效
<mvc:default-servlet-handler/>
异常处理
HandlerExceptionResolverresolveException()
局部异常处理
仅能处理指定Controller中的异常
@ExceptionHandler(value={RuntimeException.class}),指定在异常处理方法的前面
全局异常处理
对所有异常进行统一处理
配置SimpleMappingExceptionResolver
发生异常时使用对应的视图报告异常
<!-- 配置全局异常处理器 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- 指定RuntimeException由叫“error”的逻辑视图来处理 --> <prop key="java.lang.RuntimeException">error</prop> </props> </property> </bean>
日期类型转换
Spring MVC没有字符串与日期类型转换报错:BindingException
在实体类中私有属性前写@DateTimeFormat(pattern=”yyyy-MM-dd”)
Spring MVC表单标签使用
引入标签库<%@ taglib prefix=”fm” uri=”http://www.springframework.org/tags/form” %>
Spring MVC常用表单标签
名称 | 说明 |
---|---|
表单元素 | |
文本框标签 | |
密码框标签 | |
隐藏框标签 | |
多行输入框标签 | |
单选框标签 | |
复选框标签 | |
下拉列表标签 | |
检验对应的错误信息 |
- modelAttribute
- 指定绑定的模型属性,默认为command
- action
- 可不指定,会自动应用跳转过来的路径为指定路径
-
- path:相当于原来的name属性
- cssClass:对应CSS样式类名
- cssErrorClass:表彰表单提交后报错时采用的CSS样式
- cssStyle:对应style属性
- htmlEscape:绑定的表单属性值是否要对HTML特殊字符进行转换,默认为true
服务器端的数据校验
JSR303Java为Bean数据合法性校验所提供的标准框架
Spring MVC支持JSR303
JSR303通过在Bean属性上标注注解来指定校验规则。
Spring本身没有提供JSR 303的实现
实现者:Hibernate Validator
JSR303约束
使用启动校验注解
对Controller的处理方法中必须对所声明的实体类参数标注@Valid,才能实施校验
在该实体参数后必须跟一个BindingResult的参数,否则直接抛出异常。
然后在jsp页面进行错误信息输出
错误信息使用注解的message属性进行自定义
Controller的处理代码如下:
public String addSave(@Valid Users user,BindingResult err){ if(err.hasError()){ return "user/add"; } ... }
jsp的处理代码如下:
<fm:errors path="userName" />
约束 | 说明 |
---|---|
@Null | 被注解的元素必须为null |
@NotNull | 被注解的元素必须不为null |
@NotEmpty | 被注解的元素不为null且不为empty(针对集合) |
@NotBlind | 被注解的字符串不是Null且被trim后长度不为0 |
@AssertTrue | 被注解的元素必须为True |
@AssertFalse | 被注解的元素必须为False |
@Min(value) | 被注解的数字和字符串,其值必须小于等于指定的最小值 |
@Max(value) | 被注解的数字和字符串,其值必须大于等于指定的最大值 |
@DecimalMin(vlaue) | 被注解的元素必须是一个数字,其值必须小于等于指定的最小值 |
@DecimalMax(value) | 被注解的元素必须是一个数字,其值必须大于等于指定的最大值 |
@Size(min,max) | 被注解的集合长度必须在指定的范围内 |
@Length(min,max) | 被注解的字符串长度必须在指定的范围内 |
@Digits(integer,fraction) | 被注解的元素必须是一个数字,其值必须在可接受的范围(integer是整数精度,fraction是小数精度) |
@Range(min,max) | 检查数字是否在范围内 |
@Past | 被注解的Date和Calendar必须是一个过去的日期 |
@Future | 被注解的Date和Calendar必须是一个将来的日期 |
@Pattern | 被注解的字符串符合一个正则表达式 |
被注解的字符串符合email格式,如果为null算通过验证 |
REST风格
Representational State Transfer,表述性状态转移,是一种软件架构风格查看/修改/删除所对应的传统URL与REST风格的URL对应风格
/userview.html?id=12=====>/user/view/12
/userdelete.html?id=12====>/user/view/12
请求方式
GET
POST
DELETE
PUT
Spring MVC提供对REST的支持
Controler方法做如下改动
@RequestMapping(value=”/view/{id}”)
public String add(@PathVariable Integer id)
Spring文件上传
MultipartResolver接口用于处理上传请求,将上传请求包装成可以直接获取文件的数据
两个实现类
StandardServletMultipartResolver
使用了Servlet3.0标准的上传方式
CommonsMultipartREsolver
使用了Apache的commons-fileupload来完成具体的上传操作
实现步骤
服务器端:
配置MultipartResolver(springmvc-config.xml)
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5000000" /> <property name="defaultEncoding" value="UTF-8" /> </bean>
Controller处理:多文件上传需要把MultipartFile改为数组,并在前面加上@RequestParam注解即可,必须加这个注解,否则会报不能实例化数组的错误
public String add(@RequestParam(value="imgPath"),required=false MultiPartFile upload,HttpSession session){ //判断文件是否为空 if(!upload.isEmpty()){ //获得文件目标路径 String path=session.getServletContext().getRealPath("/upload"); //获得原文件名 String oldFileName=upload.getOriginalFileName(); //获得文件后缀 String suffix=FilenameUtils.getExtension(oldFileName); //获得文件大小 int fileSize=upload.getSize(); //创建新的文件名 String fileName=System.currentTimeMillis()+RandomUtils.nextInt(1000000); //创建服务器上的新文件 File newFile=new File(path,fileName); //如果文件不存在,则创建 if(!newFile.exists()){ newFile.mkdirs(); } //将上传的文件保存到磁盘上。 upload.transferTo(newFile); } }
相关文章推荐
- js基础知识相关学习笔记记录
- 11月19日spring mvc的表单处理的相关知识
- 11月19日spring mvc的表单处理的相关知识
- SMS相关知识学习笔记
- Java容器学习笔记(二) Set接口及其实现类的相关知识总结
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- 移动IP技术相关知识(个人知识记录一)
- Spring事务相关知识的记录
- [项目过程中所遇到的各种问题记录]编辑器篇——FCKeditor相关知识及各种常见使用问题
- session相关的知识笔记。
- opencv学习笔记——中文论坛上相关知识汇总
- 11月19日spring mvc的表单处理的相关知识
- 笔记:Delaunay三角剖分(Delaunay Triangulation)相关知识
- prototype 1.5相关知识及他人笔记
- [项目过程中所遇到的各种问题记录]编辑器篇——FCKeditor相关知识及各种常见使用问题
- 11月19日spring mvc的表单处理的相关知识
- prototype 1.5相关知识及他人笔记
- J2EE学习笔记一:相关概念和基础知识
- C++软件开发相关知识笔记
- [笔记] 3C认证相关事宜案例记录