文件上传
三要素:
1.post请求
2.type为file
3.添加属性enctype=“multipart/form-data”
配置文件上传解析器:
applicationContext-mvc.xml配置
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置上传大小-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
cookie和session的区别
cookie:将一小段文本信息保存在客户端浏览器中的一种会话跟踪技术
生命周期:默认请求下,浏览器会将Cookie保存在内存中,只有浏览器不关闭,数据都在。直到浏览器关闭,数据消失
设置生命周期:setMaxAge(int n)
n<0:默认状态,保存在内存中,关闭浏览器数据失效
n=0:立即删除
n>0:保存在硬盘中,持续n秒(这时跟浏览器关不关闭无关),直到时间走完之后自动删除
优点:减轻了服务器的压力
缺点:
1.数据保存在浏览中,数据容易丢失,数据容易被获取,不安全(Cookie可以被禁用)
2.保存数据类型有限,只能是字符串
3.保存的数据大小有限制,大约是4kb左右
ps:cookie不能跨域获取
session:将数据保存在服务器端的会话跟踪技术
生命周期:
出生:创建Session对象
invalidate():销毁session对象
数据保存的时间:
出生:添加数据的时候
数据消失:过期时间结束(默认的过期时间是30分钟,从不操作开始计时)
自定义过期时间:
代码方式:session.setMaxInactiveInterval(int s)
web.xml方式:< session-config>,单位是分钟
优点:
1.由于session是将数据保存在服务器端,安全性高相对较高
2.大小相对于Cookie来说大得多
3.数据类型没有限制
缺点:可能会影响服务器的性能
cookie和session的优缺点其实就是反着的
用cookie实现登录页面记住我选项
前端:在记住我那个框的属性中写上value和name
<input value="1" name="jzw" id="jzww" type="checkbox"><span class="label-text">记住我</span>
然后通过document.cookie获取后台传过来的cookie,对其进行操作
//获取重后台传过来的cookie
var cookie = document.cookie;
//console.debug(cookie); 获取到字符串username=root; password=123
//先判断cookie不为null
if(cookie != null){
//然后判断cookie中是否包含username
if(cookie.indexOf("username=") != -1){
var username = null;
var password = null;
//然后把cookie字符串进行以";"为分割,得到一个数组
var arr =cookie.split(";");
//遍历数组
for(var i=0; i<arr.length; i++){
//判断数组中是否包含username
if(arr[i].indexOf("username") != -1){
//进行截取
username = arr[i].substring(arr[i].lastIndexOf("=")+1);
}if(arr[i].indexOf("password") != -1){
//进行截取
password = arr[i].substring(arr[i].lastIndexOf("=")+1);
}
}
//进行赋值
$("#unn").val(username);
$("#paa").val(password);
$("#jzww").prop("checked",true);
}else{ //这里为取消了记住我
$("#unn").val("");
$("#paa").val("");
$("#jzww").prop("checked",false);
}
后端:接收传过来的value和name,判断value是否有值,有值的话就是记住我,没值就是没有记住我
记住我就是新建cookie,然后给cookie设置添加需要添加的属性,再给cookie设置个路径,然后给cookie设置个存活时间,最后响应到前端去
//判断jzw是否为null
if(jzw != null){ //说明有值,这里的jzw是Integer jzw是从前端传过来的
//创建cookie,把username和password放到coolie中去
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
//为其设置路径
c1.setPath("/");
c2.setPath("/");
//设置存活时间
c1.setMaxAge(7*24*60);
c2.setMaxAge(7*24*60);
//把cookie响应到前端去
resp.addCookie(c1);
resp.addCookie(c2);
}
取消记住我就是从前端获取cookie,然后获取的是数组,遍历数组,在遍历中去比较需要销毁掉的cookie,然后再把该cookie的状态响应给前端
//先从前端获取cookie
Cookie[] cookies = req.getCookies();
//遍历
for (Cookie cookie : cookies) {
//判断其的值和username,password相同就进行销毁
if(cookie.getName().equals("username") || cookie.getName().equals("password")){
cookie.setMaxAge(0);
//设置路径
cookie.setPath("/");
//把其状态响应到前端去
resp.addCookie(cookie);
}
}
Freemarker页面静态化技术
FreeMarker是一款模板引擎
使用步骤:
1.导入jar包
2.创建一个配置对象(传递一个版本)
3.设置模板加载路径
4设置一个模板编码
5.获取一个模板对象
6获取一个数据
7生成文件
freemarker工具类
public class FreeMarkerUtil {
//String templateUrl -- 模板的加载路径
//String templatename -- 模板的名称
//Object data -- 模板中的数据
//String suffix -- 模板生成的文件的后缀
public static String createFile(String templatePath,String templateName,Object data,String suffix){
//创建一个Configuration对象,为了创建Tmeplate对象
Configuration config = new Configuration(Configuration.VERSION_2_3_28);
File file = new File(templatePath);
PrintWriter out = null;
try {
config.setDirectoryForTemplateLoading(file);//设置模板的加载路径
config.setDefaultEncoding("UTF-8");//设置模板的编码集
Template template = config.getTemplate(templateName);//生成模板对象
//生成随机的名称,使用随机数
//String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//使用时间戳生成
long fileName = System.currentTimeMillis();
//创建一个字符流
out = new PrintWriter(new File(file,fileName + suffix));
template.process(data, out);//生成静态资源
return fileName+suffix;//返回文件的名称:带后缀的
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
out.close();
}
return null;
}
}