下载时 ,文件名乱码问题:
edge:
URLEncoder.encode(fileName,“UTF-8”)
firefox:
给文件名 加:
前缀 =?UTF-8?B?
String构造方法
Base64.encode
后缀 ?=
示例:
response.addHeader(“content-Disposition”,“attachment;filename==?UTF-8?B?”+ new String( Base64.encodeBase64(fileName.getBytes(“UTF-8”)) ) +"?=" );//fileName包含了文件后缀:abc.txt
EL :为了消除jsp中的Java代码
语法:
${EL表达式}
a. EL不需要导包
b.在el中调用属性,其实是调用的getXxx()方法
${范围.对象.属性.属性的属性 }
操作符:操作:属性,不是对象
. : 使用方便
[]: 如果是常量属性,需要使用双引号/单引号 引起来;比点操作符更加强大
[]强大之处:
a.可以容纳一些 特殊符号 (. ? -)
b.[]可以容纳 变量属性 (可以动态赋值)
String x = “a”;
requestScope.a等价于{requestScope.a}等价于requestScope.a等价于{requestScope[“a”]}等价于KaTeX parse error: Expected '}', got 'EOF' at end of input: {{requestScope[x]}
c.可以处理数组
${requestScope.arr[0] }
普通对象、map中的变量
通过EL获取JSP 九大内置对象
${pageContext }
${pageContext.request }
${pageContext.sessoin }
JSTL:比EL更加强大
需要引入2个jar :jstl.jar standard.jar
引入tablib :
其中prefix=“c” :前缀
核心标签库: 通用标签库、条件标签库 迭代标签库
a.通用标签库
赋值
i:
在某个作用域之中(4个范围对象),给某个变量赋值
//等价于request.setAttribute("name", "zhangsan") ;
ii:
给普通对象赋值
在某个作用域之中(4个范围对象),给某个对象的属性复制 (此种写法,不能指定scope属性)
给map对象赋值
注意 可以给不存在的变量赋值 (但不能给不存在的对象赋值)
:显示
true:
false:
:删除属性
选择:
if(boolean)
单重选择
if else if… esle if… else /switch
在使用 test="" 一定要注意后面是否有空格
例如:
test="${10>2 }" true
test="${10>2 } " 非true
循环(迭代标签库)
for(int i=0;i<5;i++)
-${name }-
for(String str:names)
${student.sname }-${student.sno }
过滤器:
实现一个Filter接口
init()、destroy() 原理、执行时机 同Servlet
配置过滤器,类似servlet
通过doFilter()处理拦截,并且通过chain.doFilter(request, response);放行
filter映射
只拦截 访问MyServlet的请求
/MyServlet
拦截一切请求(每一次访问 都会被拦截)
/*
通配符
dispatcher请求方式:
REQUEST:拦截HTTP请求 get post
FORWARD:只拦截 通过 请求转发方式的请求
INCLUDE:只拦截拦截通过 request.getRequestDispatcher("").include() 、通过此种方式发出的请求
ERROR:只拦截发出的请求
过滤器中doFilter方法参数:ServletRequest
在Servlet中的方法参数:HttpServletRequest
过滤器链
可以配置多个过滤器,过滤器的先后顺序 是由 的位置 决定