普通的Java Web项目中使用JSTL来简化JSP, 以及使用 标签处理Cross-Site Scripting安全问题。
1. 下载JSTL必要的jar包
官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下,将 tld下的需要引入的 tld 文件复制到 WEB-INF/lib目录下。
2. 引入
在需要使用JSTL的JSP文件最开始处加入
3. 使用
Demo项目创建了2个页面,index.jsp 和welcome.jsp,以及用于接受数据的mode ---User.java
三个文件的code:
index.jsp
pageEncoding="ISO-8859-1"%>
Insert title hereindex页面通过提交按钮将表单信息传到welcome页面。
welcome.jsp
pageEncoding="ISO-8859-1"%>
Insert title hereString nm = request.getParameter("name");
String pwd = request.getParameter("password");
%>
welcome.jsp接收index页面传递过来得方式有两种
User.java
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1、User bean接收
property的值需要和index.jsp中输入框的name值对应。
2、通过变量接收
String nm = request.getParameter("name");
String pwd = request.getParameter("password");
jsp中嵌套的java code,将request中的参数存到两个变量中(nm, pwd)
那么如何将index页面传递过来的参数显示呢?
1、EL表达式
${xxx}
2、标签
直接输出到页面
将值填充到输出框中
"/>" />
" />
但是为什么EL表达式中不直接用nm变量?因为${nm}拿到的值为null。
EL表达式中的内容必须在PageScope、RequestScope、SessionScope、ApplicationScope四个范围之一,才能取到值。
而nm定义在Java中,属于局部变量。
3、标签
4、
或者
但是和这两种输出方式是有区别的,即:输出内容中含html或者js标签时,前者会影响html页面格式或者执行js内容,后者会直接输出,不会影响页面和执行js
例如:
输入
, welcome页面会出现弹框
而就不会,而是直接输出内容,不执行js。
因此,JSTL的标签可以用来处理Cross-Site Scripting 安全问题。