JavaWeb-core剩余标签、国际化、fmt标签、过滤器

一、JSTL中的core剩余标签
  1. <c:out value="${data}" default="木有值"  escapeXml="false"></c:out>
    • 作用: 输出内容,功能比 ${ } 更强,当data不存在时以默认值输出页面,
    • value:获得域对象中的data
    • escapeXml:是否转义特殊标签,默认true转义。true表示转义特殊标签,false表示不转义标签。
  2. <c:set  value="aaaa"  var="a" scope="request"></c:set>
  • 作用&用法:var用来存储变量,,,,,从scope范围取出 ${requestScope.a}:回顾-->web中开发中的常用对象(11大隐式对象)pageScope/requestScope/sessionScope/applicationScope/param/parmaValues/header/headerValues/cookie/initParam
    • 可把某些值保存到域中:<c:set  value="bbb"  var="b" scope="page"></c:set>怎么取? ${pageScope.b}
    • 可设置JavaBean的属性值:<c:set  target="${ p }"  property="name"  value="niuyang"></c:set>//p为一个类的域对象
    • 可设置Map的key和value值:<c:set  target="${ map }"  property="k/v" value="kkk/vvv"></c:set> //map为域对象
  1. <c:catch  var="e">       <%  int i = 1/0; %>     </c:catch> : 捕获异常, ${ e.message };
  2. <c:choose><c:when></c:when><c:otherwise></c:otherwise></c:choose>
  • c:choose不能单独使用,choose中可以只有when,choose不可以只有otherwise,choose中可以有多个when,但只有一个otherwise
  1. <c:url ><c:param name="username" value="shanjie"></c:param></c:url>如果url要输出的value以"/"开头,访问它时会自动加上当前应用路径、还能对地址进行重写。这样组合可以对中文参数进行编码。
  2.  <c:remove var="a" scope="request"/>在域范围内移除某一个域变量
  3.  <c:import url="/1.jsp"></c:import> :  c:import动态包含-
  4. <c:forTokens items="a,b.c/d" delims=",./" var="s" >   ${s}<br/>     </c:forTokens>
二、国际化的概念和主要类
  1. 国际化又称为 i18n:internationalization,主要使程序动态产生数据(例如标题栏导航条等固定不变的文本信息),实现软件国际化
  2. 资源文件名的书写格式:myproperites_zh_CN.properties  &&  myproperites_en_US.properties
  3. 主要类
    • ResourceBundle类读取资源文件
    • Locale类实例对象代表特定的地理、政治、文化区域。
    • DataFormat国际化日期类
    • NumberFormat类
    • MessageFormat类(动态文本)
    • 模式字符串与占位符----->On {0}, a hurricance destroyed {} houses and caused {} of damage.Object [] msgArgs = {date, new Integer(99),new Double(1E7)};
三、JSTL中的fmt简介
  1. 导入包:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  2. 常用标签:
    • <fmt:message  key="username"  bundle="${msg}"></fmt:message>
    • <fmt:param></fmt:param>
    • <fmt:parseDate></fmt:parseDate>
    • <fmt:formatDate></fmt:formatDate>
    • <fmt:formatNumber></fmt:formatNumber>
四、过滤器概述及作用
  1. 对web中的资源进行拦截。“保安”
  2. 可以放行前对request进行一下更改;放行后可以对response进行更改。
五、过滤器的编写步骤
  1. 编写一个类,实现javax.servlet.Filter接口,要记住在doFilter中用chain调用doFilter(request,response);
  2. 在web.xml文件中配置filter和filter-mapping,在mapping的url-pattent中配置 /* 表示所有的应用都会被过滤
  3. 每次访问目标资源,过滤器类的doFilter方法都会执行拦截。参数:FilterChain.doFilter():放行。即让目标资源执行。
六、过滤器的生命周期和过滤器参数配置
  1. 过滤器的生命周期和servlet的生命周期相似,过滤器在加载应用时就实例化并完成了初始化。
七、过滤器简单案例:3个
  1. 解决中文乱码问题get除外 
  • 原理:在过滤器的doFilter方法中,但该方式只对POST方式管用,要解决全站中文的编码问题在下面案例详述
    • request.setCharacterEncoding(encoding); //encoding 从web.xml文件读取
    • response.setCharacterEncoding(encoding);
    • response.setContentType("text/html;charset=" + encoding);
  1. 控制动态资源不要缓存,控制静态资源的缓存时间
  • 动态资源不要缓存:response.setHeader("Expires", "-1");response.setHeader("Cache-Control", "no-cache");response.setHeader("Pragma", "no-cache");
  • 静态资源缓存时间:response.setDateHeader("Expires", System.currentTimeMillis()+hour*60*60*1000);
  1. 实现自动登录
    • 思路:
      • 先从表单页面着手,将表单提交到一个servlet(MyServlet)中处理数据,根据用户名和密码查询出用户,如果返回的用户不为空则放一个cookie名为UserInfo,值用户名+"_"+MD5加密后的密码(以'_'线分割是方便取出用户名和密码好进行session处理,不要忘记添加cookie),并且放入一个session--->user,然后提示登录成功转向主页
      • 在过滤器中处理以下信息:如果在session中没有该用户信息则从cookie中取出UserInfo的用户名和密码,再根据用户名向数据库验证一次,根据

        • User user = (User) request.getSession().getAttribute("user");
        • if (user == null) {
        • Cookie[] cookies = request.getCookies();
        • for (int i = 0; cookies != null && i < cookies.length; i++) {
        • if ("UserInfo".equals(cookies[i].getName())) {
        • String value = cookies[i].getValue();
        • String username = value.split("\\_")[0];
        • String password = value.split("\\_")[1];
        • user = UserDB.findUserByUsername(username);// 得到的user中密码是MD5加密后的
        • if (password.equals(MD5Util.encode(user.getPassword()))) {
        • request.getSession().setAttribute("user", user);
        • }
        • }
        • }
        • }
        • chain.doFilter(request, response);
八、过滤器高级配置
  1. 过滤器映射的dispatcher
  • REQUEST:默认的参数值,如果配置了其他值,默认值不在存在,若需要,还要重新配置dispatcher的REQUEST
  • INCLUDE:只是动态包含有效
  • FORWARD:errorPage是错误的页面,也是属于转发技术,所有配置了FORWARD,errorPage就不用设置ERROR了
  • ERROR:注意全局的错误页面在web.xml中配置时,需要用到ERROR值
九、包装设计模式回顾
  1. 包装BufferedReader类
  2. 解决全站中文乱码问题
    • 思路:主要是在过滤器中设置request的编码和response的编码,但这只限于post提交方式;要解决get提交,解决方法是包装HttpServlertRequestWrapper,对需要重写的方法getParamter(String name)进行功能增强,通过getMethod()判断如果方法是get将数据再编码后(new String(data.getBytes("ISO-8859-1"),"UTF-8"))返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值