日期:2014-05-16  浏览次数:20406 次

Jstl和el
Jstl和el以前对我来说是一个很陌生的词,不知道它们是什么,直到今天才知道它们的用处,以前我们在编jsp程序的时候,有经验的程序员总说我们把java程序写在jsp页面中很难看,而且不是很灵活,复杂度也很高,复用率低,所以尽量不要把java程序写在jsp页面中,那时我真的很凝问,不知道是怎么一回事,难道有什么方法可以解决这样的问题吗?今天得到了答案是可以的,我们可以采用Jstl和el标签就可以实现了,而且和方便很灵活,不会像我们在编jsp程序的时候用java程序总会出很多的错误,特别是空指针异常,但是用了Jstl和el以后,即使错了,也不会出现很严重的错误。比如下面的代码。
一:我们在servlet中保存一些参数,在jsp中取出:
package tmc.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JstlServlet1 extends HttpServlet {


public JstlServlet1() {
super();
}


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
           request.setAttribute("name","tian");
           request.setAttribute("name1", "mao");
           request.setAttribute("name2","chun");
           request.setAttribute("name3","<font color='red'>北京欢迎您</font>");
         
           List<Dog> list = new ArrayList<Dog>();
           list.add(new Dog("夏奥1"));
           list.add(new Dog("夏奥2"));
           list.add(new Dog("夏奥3"));
           list.add(new Dog("夏奥4"));
           list.add(new Dog("夏奥5"));
           list.add(new Dog("夏奥6"));
           list.add(new Dog("夏奥7"));
           list.add(new Dog("夏奥8"));
           request.setAttribute("list",list);
           request.setAttribute("now", new Date());
           request.getRequestDispatcher("2.jsp").forward(request,response);
           //request.getRequestDispatcher("fmt.jsp").forward(request,response);

}


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


}

}

我们传统的方式会这样写:
<%
    String name1 = request.getAttribute("name");
    String name2 = request.getAttribute("name1");
    String name3 = request.getAttribute("name2");
    String name4 = request.getAttribute("name3");
    List<Dog> list = request.getAttribute("list");
    out.println(name);
    out.println(name1);
    out.println(name2);
    out.println(name3);
    for(Dog dog:list){
       out.println(dog.getName());
}
%>
以上的这种写法容易出错,当传进来的数是空的时候,就会出现空指针异常了,而且这样的代码看上去不是那么的好,特别是在jsp页面上,错误很难调试。所以我们可以采用Jstl和el标签很简单的来实现和完成上面的相同功能:
<c:out value="${name}"></c:out>
<c:out value="${name1}"></c:out>
<c:out value="${name2}"></c:out>
<c:out value="${name3}" escapeXml="false"></c:out>

&