2014-08-16 日志

JSTL


Apache提供的标签库,
jar包:jstl-1.2.jar,如果傅MyEclipse,它会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入。


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


导入JSTL核心标签库
<%taglib prefix="c" uri="http://java.sun.com/jstl/core"%>




 
* 创建名为a,值为hello的域属性,范围:page
* 范围为session



* 输出字符串aaa
* 输出域属性aaa,其中与${aaa}相同
* 如果${aaa}不存在,那么输出xxx字符串
* 如果${aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击



* 删除名为a的域属性
* 删除page域中名为a的域属性



* 输出URL:/项目名/AServlet
* 把生成的url保存到page域中,而不会输出
* :输出URL:/项目名/AServlet?username=%xx%xx%xx%xx%xx%xx,其中张三会被URL编码
   
 




* 当条件为true时执行标签体内容
    hello
 




*
    a
    b
    c
    d
 



  等同与:
  if() {
  } esle if() {
  } esle if() {
  } else if() {
  } else {
  }


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





可以用来遍历数组、List、Map、


1. 计数循环



 ${i}

等同于
for(int i = 1; i <= 10; i++) {
  out.println(i);
}





 ${i}

等同于
for(int i = 1; i <= 10; i+=2) {
  out.println(i);
}


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


2. 遍历数组


<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>








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


3. 遍历List


<%
List names = new ArrayList();
names.add("zhangSan");
names.add("liSi");
names.add("wangWu");
names.add("zhaoLiu");
pageContext.setAttribute("ns", names);
%>
 





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


4. 遍历Map


<%
Map stu = new LinkedHashMap();
stu.put("number", "N_1001");
stu.put("name", "zhangSan");
stu.put("age", "23");
stu.put("sex", "male");
pageContext.setAttribute("stu", stu);
%>








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


5. 循环状态对象


循环状态对象是用来说明循环的状态的,属性如下:
count:int类型,当前以遍历元素的个数;
index:int类型,当前元素的下标;
first:boolean类型,是否为第一个元素;
last:boolean类型,是否为最后一个元素;
current:Object类型,表示当前项目。



第一行:
最后一行:









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


导入JSTL格式化标签库


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


<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>



---------


<%
double d1 = 3.5;
double d2 = 4.4; 
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>





* pattern:0.00,表示小数不足两位时,使用0补足两位
* pattern:#.##,表示小数不足两位时,有几位显示几位,不会补足




============================
============================
============================




自定义标签


自定义标签:


1. 实现Tag接口,即传统标签。不建议使用!
2. 实现SimpleTag接口,即简单标签。建议使用!


JavaWeb中还提供了SimpleTagSupport类,继承它要比实现SimpleTag接口方便。


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


步骤:
1. 标签处理类:继承SimpleTagSupport类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
// 获取JspContext对象,再获取out对象,再向页面输出
// 获取到的JspContext其实就是当前页面的pageContext对象
this.getJspContext().getOut().write("

Hello SimpleTag!

") ;
}
}


2. 标签描述符文件(tld)


/WEB-INF/tlds/itcast.tld



xmlns:xml="http://www.w3.org/XML/1998/namespace" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">


1.0 
itcast 
http://www.itcast.cn/tags 
 
hello
cn.itcast.tag.HelloTag
empty




3. jsp页面中使用自定义标签


<%@ taglib prefix="it"  uri="/WEB-INF/hello.tld"  %>
......



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


有标签体的标签


1. 标签处理类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
PageContext pc = (PageContext) this.getJspContext();
HttpServletRequest req = (HttpServletRequest) pc.getRequest();
String s = req.getParameter("exec");
if(s != null && s.endsWith("true")) {
// 获取标签体对象
JspFragment body = this.getJspBody() ;
// 执行标签体
body.invoke (null);
}


}
}


2. tld



hello
cn.itcast.tags.HelloTag
scriptless



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


不执行标签下面的页面内容


public void doTag() throws JspException, IOException {
this.getJspContext().getOut().print("

只能看到我!

");
throw new SkipPageException();
}


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


带有属性的标签


public class IfTag extends SimpleTagSupport {
private boolean test;//设置属性,提供getter/setter方法
public boolean isTest() {
return test;
}
public void setTest (boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {//如果test为true,执行标签体内容
this.getJspBody().invoke(null);

}
}


 
if 
cn.itcast.tag.IfTag 
scriptless

 
test
true
true
 



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


MVC


1. 什么是MVC
  MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。


* 控制器Controller:对请求进行处理,负责请求转发;
* 视图View:界面设计人员进行图形界面设计;
* 模型Model:程序编写程序应用的功能(实现算法等等)、数据库管理;


2. Java与MVC


JSP Model1第一代:JSP + DB
JSP Model1第二代:JSP + javabean + DB
JSP Model2:JSP + Servlet + JavaBean + DB


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


JavaWeb三层框架


* Web层(表述层):与Web相关的,例如jsp、servlet都是Web层
* Business层(业务逻辑层):封装业务逻辑,通常对应一个业务功能,例如登录、注册都是一个业务功能。
* Data层(数据访问层):封装对数据库的操作,通常对应一次对数据库的访问,例如添加、修改、删除、查询等。

你可能感兴趣的:(itcast,java)