一、简介
- EL表达式,全程即Expression Language是表达式语言,作用是替代JSP页面中的表达式脚本进行输出,因为EL表达式更加的简介方便
<!-- 传统的jsp表达式脚本输出 --> <%request.setAttribute("key1","value1");%> <%=request.getAttribute("key1")%> <!-- EL表达式 --> ${key1}
EL表达式输出null值的时候,输出的是空串,而JSP表达式脚本则会输出null字符串
二、EL表达式脚本输出域数据的顺序`
- 当四个域中存在相同的key数据时,EL表达式脚本会按照四个域即pageContext-->request-->session-->application的顺序进行搜索,找到就输出
- EL表达式中输出Bean的普通属性、数组属性、List集合属性、map集合属性
三、EL表达式运算--> $(运算表达式)
- 关系运算
- 逻辑运算
- 算数运算
- empty运算 判断一个数据是否为空,如果为空,则返回true,否则返回false
- 三元运算
- . 运算和 []运算 . 可以输出bean对象某个属性的值,[]可以输出有序集合中某个元素的值,还可以输出map集合的key中含有特殊字符的值
四、EL表达式的十一个隐含对象 EL表达式中自己定义的,可直接使用
- pageContext pageContextImpl - ->可获取pageContext中的九大内置对象
- pageScope Map<String,Object> - ->可获取pageContext域中的数据
- requestScope Map<String,Object> - ->可获取request域中的数据
- sessionScope Map<String,Object> - ->可获取session域中的数据
- applicationScope Map<String,Object> - ->可获取servletContext域中的数据
- param Map<String,String> - ->可获取请求的参数的值
- paramValus Map<String,String[]> - ->可获取请求的参数的值,获取多个值时使用
- header Map<String,String> - ->可获取请求头信息
- headerValues Map<String,String[]> - ->可获取请求头信息,获取多个值时使用
- cookie Map<String,Cookie> - ->可获取当前请求的cookie信息
- initParam Map<Sting,String> - ->可获取在web.xml中配置的<context-param>上下文参数
五、EL表达式获取四个特定域中的数据
${pageScope key}
六、pageContext对象的使用
- 协议
- 服务器ip
- 服务器端口号
- 获取工程路径
- 获取请求方法
- 获取客户端ip地址
- 回去会话的id编号
${req.scheme} ${pageContext.request.serverName} ${pageContext.request.serverPort} ${pageContext.request.contextPath} ${pageContext.request.method} ${pageContext.request.remoteHost} ${pageContext.session.id}
七、EL表达式其它隐含对象的使用
- param ${param.username} 获取请求参数的值
- paramValues ${paramValues.username[0]}获取多个值时使用
- header ${header['User-Agent']}
- headerValues ${headerValues['User-Agent'][0]}
八、JSTL标签库
- 简介:JSTL,全程即JSP Standard Tag Library JSP标准标签库。是一个不断完善的开放源代码的JSP标签库,主要是为了替换JSP中的代码脚本
- JSTL由五个不同功能的标签库组成,先导包,taglibs-tandar-impl-1.21.jar 、 taglibs-tandar-spec-1.21.jar 在向JSP标签库中使用taglib指令引入标签库 <%@ taglib prefix='c' uri=" " %>
九、core核心库的使用
- <c:set/> 标签可以往向域中添加数据- - ><c:set scope="session" var="key1" value="value1"/>
- <c:if/> 标签可用来做if判断
- <c:choose/> <c:when/> <c:other/>标签 多路判断,作用和switch...case...defalut非常接近
- <c:forEach items="被遍历的数据,可以使数组,Map,集合" var="item"> 遍历时输出
十、文件的上传
- 要有一个form标签,method=post请求
- form标签中的encType属性值必须为multipart/form-data的值
- 在form标签中使用input type=file添加上传的文件
- 编写服务器代码(servlet程序)去接收,处理上传的数据
- 注意:encType = multipart/form-data 表示提交的数据,以多段(每个表单项一个数据段)的形式进行拼接,然后以二进制流发送给服务器
- 常用的jar包 :commons-fileupload.jar 和 commos - io.jar包
- 常用类:
- ServletFileUpload,用于解析上传的数据
- FileItem,表示每一个表单项
- 常用方法
- boolean ServletFileUpload.isMultipartContent(HttpServletRequest req , HttpServletResponse resq);用于判断当前解析上传的数据是否是多段
- public List<FileItem> parseRequest (HttpServletRequest req) 解析上传的数据
- boolean FileItem.isFormField() 判断这个表单项是普通表单项还是上传的文件类型
- String getFieldName() 获取表单项的name属性值
- String getString()获取当前表单项的值
- String FileItem.getName() 获取上传的文件名
十一、文件的下载
- response.getOutputStream()
- servletContext.getResourceAsStream();
- servletContext.getMimiType();
- response.setContentType();
- response.setHeader("ContentDispoistion","attachment;fileName=1.jpg") 表示告诉浏览器,跟在它下载的附件是图片类型的,名称为1.jpg