总结日记之freemaker和el和jstl的区别-17/11/1

1.el表达式的使用

不需要引入任何的jar包直接可以在页面使用,格式:${  }  但是这里填写的参数必须是存在于request或者其他的域中的才能显示。

  1)访问bean的属性

    方式一:

      ${user.name},容器会依次从pageContext,request,session,application中查找(getAttribute)绑定名称为user的对象,并调用该对象的getName方法,最后输出。

      并且比较友好,找不到对象会将null转换成""空字符串输出。但是一定要有get方法,如果找不到get方法,还是会error500错误。

      指定查找范围:pageScope,requestScope,sessionScope,application来指定,例如${sessionScope.user.name},就算session找不到,其他地方也不找了

    方式二:

      ${user["name"]}

      ${user.interest[0]},可以访问数组下标,要有get方法。

  2)进行一些简单的运算,运算的结果可以给jsp标签的属性赋值,也可以直接输出。

    a.算术运算 +- */ %

      ${1+1}直接输出2,没有字符串拼接 .${"2"+"4"}输出6

    b.关系运算 > < = == >= !=

      ${2>1}直接输出true

    c.逻辑运算 && || !

      ${1<2 && 2>3} false

    d.empty运算

      用来判断集合是否为空,或者是否是一个空字符串

      <%

        List list1=new ArrayList();

        request.setAttribute("list",list1);

        request.setAttribute("str2","");

        ${empty list} //输出true

        ${empty str2}//输出true

        ${empty null}//输出true

        ${empty aaa}//输出true,容器找不到aaa这个绑定名也会true

      %>

  3)读取请求参数值 e3.jsp?username=Sally

      a.${param.username}等价于request.getParameter("username");

      b.${paramValues.city}等价于request.getParamterValues("city");

 


 

jstl标签

是Java EE网络应用程序开发平台的组成部分。它在JSP规范的基础上,扩充了一个JSP的标签库来完成一些通用任务,比如XML数据处理、条件执行、数据库访问、循环和国际化。JSTL是在JCP下,作为JSR 52被开发出来的 ,目前是由 apache 的 jakarta 小组来维护Jstl 各个版本的使用。

将jstl相关的jar文件拷贝到WEB-INF/lib下

如果使用javaee5.0,已包含jstl相关的jar文件。一般不需要再拷贝。

使用taglib指令,导入相应的标签。

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

jstl的核心标签:

  1)if

  

  

     等价于request.setAttribute("flag",运行结果true/false)   ,scope可以写page,session,application

    通过上面一行的flag结果来判断

 

  2)choose  相当于if{} elseif{} else{}

    when可以出现1次或者多次。当test属性为true时,会执行该分支。

    otherwise可以出现0次或者1次。表示例外。

  

    

    

    

    

    保密

    

    

 

  3)forEach标签,用来遍历集合或者数组。每次从集合或者数组中取一个元素,然后将其绑定到pageContext上,绑定名由var属性来指定。

    items属性用来指定要遍历的集合活着数组,可以使用el表达式。

    var属性用来指定绑定名,绑定范围固定是pageContext.

    varStatus属性:用来制定一个绑定名,绑定范围固定是pageContex。绑定值是一个特殊的对象,该对象提供了一些方法,用来获得当前遍历的状态。getIndex():获得当前被遍历的元素的下标(从0开始)。getCount():获得当前是第几次遍历(从1开始)

  

  

  例子:

  

    

      

      

      

      

      

    

    

      

 //css写个row1 row2的class,表格行颜色互换

        

        

        

        

        

      

     

    

  

姓名 性别 年龄 index count
${u.name} ${u.gender} ${u.age} ${s.index} ${s.count}

 

例子:listEmp.jsp

  servlet用转发把emplist传给jsp。删除按钮删除

  修改按钮   


2.自定义标签 简单标签(new) 复杂标签(old)

  step1,写一个java类,继承SimpleTagSupport类。

  step2.orerride doTag方法,在该方法里面编写处理逻辑。

  step3,描述标签(.tld文件)

<%@taglib uri="test" prefix="c1"%>

包名tag,类名HelloTag.

重写doTag()方法.并增加属性,这些属性要有对应的set方法。

  private String msg;

  private int qty;

  public void doTag() throws JspException, IOException {
  PageContext ctx=(PageContext)getJspContext(); JspWriter out = ctx.getOut(); for(int i=0;i    out.println(msg+"
");
  } }

 然后新建一个mytag.tld,放到WEB-INF下面和web.xml平级。

把c.tld里面xml根元素和taglib根元素复制过来。

把tlib-version,short-name,url拷过来

并把url改成test,short-name 改成c1

把23到41行tag标签复制过来。name改成hello。tag-class改成tag.HelloTag。

如果把body-content改成empty,那么在jsp里,不能写标签体。如果写成scriptless,表示带有标签体,但不能写任何java代码。如果写成JSP表示当中可以写java代码,有标签体。

attribute中,写成msg,required如果写true一定要写msg,false可写可不写msg。rtexprvalue表示能否动态赋值,可以通过el表达式计算赋值。

再写个attribute,name写成qty,required写true,rtexprvalue写true例如jsp里qty="${1+7}"

 

写个日期标签和上面过程差不多

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3.FREEMARKER是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。
freemaker和velocity 是模板引擎。 
jsp一种动态网页技术。 
模板引擎可以脱离servlet运行。main方法就能生成你想要的文件。

注:以上转自均http://www.cnblogs.com/alexhjl/p/6801423.html,尊重原创,感谢分享,博主学习中,若有不同见解请赐教,么么哒

你可能感兴趣的:(总结日记)