JavaEE——06.JSP标签技术

1.JSP标准标签库JSTL

1.JSTL简介

JSTL可以提高JSP页面的开发效率,JSTL是由5个不同功能的标签库共同组成的。如下图:


JSTL标签库

2.JSTL的配置

1.首先下载JSTL对应的jar包
点击这里下载:下载jar包

下载jar包

一般只需要下载前两个就行,但是这几个文件也不大全下呗就。
下载jar包完成之后

下载完了之后,把这几个文件拷贝到项目的lib文件夹下:
拷贝到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.标签

输出标签用于将表达式的值输出到JSP页面中
1.输出标签的2种语法格式
语法1:没有标签体

语法2:有标签体

 
  
输出标签的属性

例如当你想要输出


(在HTML中代表水平线)单纯文本时,可以不写escapeXml的值,因为它默认为true;但是如果你想输出水平线的话,就必须加上escapeXml="false",escapeXml的功能就相当于转义字符。

3.标签

标签用于在指定的范围内(page,request,session或application)内定义保存某个值的变量,或指定的对象设置属性值,与setAttribute()方法类似。
1.标签的4种语法格式
语法1:在scope指定的范围内将变量存储到变量中,如果省略[scope]默认是在page作用域

语法2:在scope指定的范围内将标签主体存储到变量中
标签主体
语法3:将变量值存储在target属性指定的目标对象的propName属性中

语法4:将标签主体存储到target属性指定的目标对象的propName属性中
标签主体
2.标签的属性

标签的属性

4.移除标签

移除标签,可以从指定的JSP范围内移除指定的变量,功能与removeAttribute()方法类似。
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.捕捉异常标签

捕捉异常标签与Java程序中的try...catch语言类似,用于捕捉程序中出现的异常;此外,它还将异常信息保存在变量中。
1.捕捉异常标签的语法格式
...//可能异常的代码
2.捕捉异常标签的属性
var:同来保存异常信息的属性名称
例如:

...

    
    <%
        int result=10/0;
    %>
    
    

异常信息:${exception}

...

6.标签

标签主要用来完成分支语句的实现,标签和Java中的if语句功能类似,但是没有对应的else标签
1.标签的2种语法格式
语法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.标签

标签可以根据不同的条件完成指定的业务逻辑(相当于switch,case),如果没有符合的条件,执行默认的业务逻辑。需要注意的是,标签只能作为标签的父标签,可以在其中嵌套这两个标签完成逻辑。
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.标签

标签可以根据循环条件遍历数组和集合类中的所有或部分数据。功能与Iterator接口类似。
1.标签的2种语法格式
语法1:数字索引迭代


标签主体

语法2:集合成员迭代


标签主体

2.标签的属性

标签的属性

标签varStatus属性的状态属性

例如:

<%@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.标签

标签用于生成一个URL路径的字符串,这个生成的字符串可以赋予HTML标记实现url的链接,或者用这个生成的url字符串实现网页的转发与重定向。在使用该标签时还可以搭配标签添加url的参数信息
1.标签的2种语法格式
语法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.重定向标签

重定向标签可以将客户端发出的request请求重新定向到其他的URL服务端,与HttpSetvletResponse的sendRedirect()功能相同,在此期间可以用param标签对request请求添加参数
1.重定向标签的2种语法格式
语法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,如下图:


添加多个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);
    }

}

你可能感兴趣的:(JavaEE——06.JSP标签技术)