1.JSP标准标签库JSTL
1.JSTL简介
JSTL可以提高JSP页面的开发效率,JSTL是由5个不同功能的标签库共同组成的。如下图:
2.JSTL的配置
1.首先下载JSTL对应的jar包
点击这里下载:下载jar包
一般只需要下载前两个就行,但是这几个文件也不大全下呗就。
下载完了之后,把这几个文件拷贝到项目的lib文件夹下:
然后你可以新建一个JSP文件,输入以下代码看看是否能成功输出:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
#下面这句是导入JSTL
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Hello World
正确运行结果如下:
2.核心标签库
1.核心标签库的主要标签
注意:在所有标签的属性中,用
[]
包含的属性表示可有可无。
2.标签
1.
语法1:没有标签体
语法2:有标签体
defaultValue
1.
例如当你想要输出
(在HTML中代表水平线)单纯文本时,可以不写escapeXml的值,因为它默认为true;但是如果你想输出水平线的话,就必须加上escapeXml="false",escapeXml的功能就相当于转义字符。
3.标签
1.
语法1:在scope指定的范围内将变量存储到变量中,如果省略[scope]默认是在page作用域
语法2:在scope指定的范围内将标签主体存储到变量中
语法3:将变量值存储在target属性指定的目标对象的propName属性中
语法4:将标签主体存储到target属性指定的目标对象的propName属性中
2.
4.移除标签
1.
2.
- var属性:用于指定要移除的变量名
- scope属性:用于指定变量存在的范围,可选值有page,request,session,application。默认值是page。
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c:remove
移除前输出变量name的值:
移除后输出变量name的值:
5.捕捉异常标签
1.
2.
var:同来保存异常信息的属性名称
例如:
...
<%
int result=10/0;
%>
异常信息:${exception}
...
6.标签
1.
语法1:可判断条件表达式,并将判断结果保存在var属性指定的变量中,而这个变量存在于scope属性所指定的范围内
语法2:不但可以将test属性的判断结果保存在指定的范围变量中,还可以根据条件的判断结果执行标签主体。标签主体可以是JSP页面能够使用的任何标签,如HTML标记,Java代码或者嵌入其它JSP标签
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c_if
欢迎${param.ref}光临!
10<30
2.
7.标签
1.
业务逻辑
业务逻辑
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c_choose
<%
request.setAttribute("now",new Date());
%>
凌晨好
早上好
上午好
中午好
下午好
晚上好
现在的时间是:${now.hours}时${now.minutes}分
8.标签
1.
语法1:数字索引迭代
标签主体
语法2:集合成员迭代
标签主体
2.
例如:
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c_forEach
<%
List all = new ArrayList();
all.add("sun");
all.add("lsu");
all.add("lsu.edu.cn");
pageContext.setAttribute("ref",all);
%>
输出全部:
${mem},
9.文件导入标签
1.
标签主体
[]
2.
例如:
接收参数的页面param.jsp
...
name参数:${param.name}
url参数:${param.url}
...
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c_import
10.标签
1.
语法1:
语法2:
...<--!可以有多个标签-->
2.
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c_url
新的地址
11.重定向标签
1.
语法1:
语法2:
2.
- url属性:必选属性,用于指定待定向资源的url,可以使用EL。
- context属性:用于在使用相对路径访问外部context资源时指定资源的名称。
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Insert title here
3.一个Servlet处理多个请求
1.实现方法一:添加多个uri
在新建Servlet类的时候添加多个对应的uri,如下图:
例如,在实现员工信息管理时,test.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
添加员工
查询员工信息
更新员工信息
删除员工
能够处理多个信息的UserServlet代码如下:
package com.demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={ "/addUser", "/queryUser", "/updateUser", "/deleteUser" })
#上面这句话还可以写成@WebServlet({ "/addUser", "/queryUser", "/updateUser", "/deleteUser" })
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
System.out.println("uri:"+uri);
if(uri.endsWith("addUser")){
addUser(request,response);
}else if (uri.endsWith("queryUser")){
queryUser(request,response);
}else if (uri.endsWith("updateUser")){
updateUser(request,response);
}else if (uri.endsWith("deleteUser")){
deleteUser(request,response);
}
}
private void deleteUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("删除员工");
}
private void updateUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("更新员工信息");
}
private void queryUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("查询员工信息");
}
private void addUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("添加员工");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.实现方法二:采用反测机制
package com.demo;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={ "/addUser", "/queryUser", "/updateUser", "/deleteUser" })
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
System.out.println("uri:"+uri);//yyzproject6/addUser
String methodName = uri.substring(uri.lastIndexOf("/")+1);
try {
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this,request,response);
} catch (Exception e){
e.printStackTrace();
}
}
private void deleteUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("删除员工");
}
private void updateUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("更新员工信息");
}
private void queryUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("查询员工信息");
}
private void addUser(HttpServletRequest request, HttpServletResponse response) {
System.out.println("添加员工");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}