您的位置:首页 > 编程语言 > Java开发

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/>


异常处理

HandlerExceptionResolver

resolveException()

局部异常处理

仅能处理指定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

服务器端的数据校验

JSR303

Java为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被注解的字符串符合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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息