javaWeb实战教程6-jsp和jstl

javaWeb实战教程


2.9 jsp

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头,以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

与纯 Servlets相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。

jsp继承于servlet,包含servlet的所有方法,我们可以像操作servlet一样操作jsp。

在网站根目录下新建一个jsp文件:Lesson9Jsp.jsp,在body中写入hello world:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
         hello world
    </body>
</html>

在浏览器中访问http://localhost/javaWeb/Lesson9Jsp.jsp

我们虽然可以在jsp中处理表单、执行业务逻辑,但通常情况下我们只使用jsp做为html页面展示数据,也就是mvc框架中的view的作用,实际的业务逻辑还是在servlet中执行。

在cn.funsoftware.Lesson.servlet里新建一个servlet:Lesson9Servlet2Jsp.java:

@WebServlet("/Lesson9Servlet2Jsp")
public class Lesson9Servlet2Jsp extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, 
    HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("username", "xiaoming");

        Type type=new TypeDao2().getById(1);
        req.setAttribute("type", type);

        List<Type> types=new TypeDao2().getList();
        req.setAttribute("types", types);

        req.getRequestDispatcher("/Lesson9Jsp.jsp").forward(req, resp);
    }
}

在Lesson9Jsp.jsp里写入

<%=request.getAttribute("username") %><br>
<%=((Type)request.getAttribute("type")).getName() %><br>
<%
    List<Type> types=(List<Type>)request.getAttribute("types");
    for(Type type:types){
%>
    <%=type.getName() %>
<%  
}
%>

在浏览器里运行http://localhost/javaWeb/Lesson9Servlet2Jsp,原本存在servlet的request中的值展示在了jsp页面里。


2.10 JSTL标准标签库

刚刚所写的Lesson9Jsp.jsp虽然实现了数据展示,但满眼的<%%>java代码,使得HTML和java混杂到一起。实际开发时,通常编写java代码和编写前台html页面的程序员是不同职责的两批人,负责前台编写的程序员可能只会HTML,或者负责前台编写的程序员没有参与过后台java的编写,不了解项目的各个类,这时候我们需要一个更简单、与java代码分离的方法来更优雅的展示数据。

Lesson9Jsp.jsp如果使用jstl标签来写,应该是这样的:

${username }<br>
${type.name}<br>
<c:forEach items="${types}" var="t">
${t.name}
</c:forEach>

2.10.1 JSTL 库安装

  1. 向项目的lib目录下导入jar包:standard.jarjstl.jar

  2. 在要使用标签的jsp页面上引入要使用的标签,如:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


2.10.2 核心标签core

核心标签是最常用的JSTL标签。引用核心标签库的语法如下:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

核心标签常用功能:

标签描述
用于在JSP中显示数据,就像<%= … >
用于保存数据
用于删除数据
与我们在一般程序中用的if一样
本身只当做和的父标签
的子标签,用来判断条件是否成立
的子标签,接在标签后,当标签判断为false时被执行
基础迭代标签,接受多种集合类型
根据指定的分隔符来分隔内容并迭代输出

运行下面的代码来实践各个标签的作用:

<c:out value="${username}"></c:out>

<hr>

<c:set var="result" value="${2000*2}"/>
<c:out value="${result}"/>

<hr>

<c:remove var="result"/>
<c:out value="${result}"/>
<hr>

<c:if test="${username=='xiaohua'}">是小花!</c:if>
<c:if test="${username!='xiaohua'}">不是小花!</c:if>
<hr>

<c:choose>
    <c:when test="${username=='小花' }">是小花</c:when>
    <c:otherwise>不是小花</c:otherwise>
</c:choose>
<hr>

<c:forEach items="${types}" var="t" varStatus="s">
${s.index }:${t.name }<br>
</c:forEach>
<hr>

<c:forTokens items="小明,小红,小花" delims="," var="name">
${name}
</c:forTokens>

2.10.3 格式化标签fmt

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

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

格式化标签常用的标签是:

标签描述
使用指定的格式或精度格式化数字
使用指定的风格或模式格式化日期和时间

其中formatNumber可以格式化数字:

maxIntegerDigits:
<fmt:formatNumber value="123.34" maxIntegerDigits="2"/><br>
minIntegerDigits:
<fmt:formatNumber value="1.1" minIntegerDigits="3"/><br>
maxFractionDigits:
<fmt:formatNumber value="1.123456" maxFractionDigits="2" ></fmt:formatNumber><br>
minFractionDigits:
<fmt:formatNumber value="1.1" minFractionDigits="3"></fmt:formatNumber><br>
pattern:
<fmt:formatNumber value="234.5678" pattern="####.00"></fmt:formatNumber><br>
  • maxIntegerDigits:整型数最大的位数;
  • minIntegerDigits:整型数最小的位数 ;
  • maxFractionDigits:小数点后最大的位数;
  • minFractionDigits:小数点后最小的位数;
  • pattern:指定一个自定义的格式化模式用与输出,0和#代表一位数字,若没有则显示 0,其中#的前导 0 和追尾 0 不显示;

formatDate可以格式化时间:

<fmt:formatDate value="<%=new Date() %>" pattern="yyyy-MM-dd HH:mm:ss"/>

pattern可以自定义格式模式。

2.10.4 函数标签fn

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn" 
       uri="http://java.sun.com/jsp/jstl/functions" %>
标签描述
fn:contains()测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase()测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith()测试输入的字符串是否以指定的后缀结尾
fn:indexOf()返回指定字符串在输入字符串中出现的位置
fn:join()将数组中的元素合成一个字符串然后输出
fn:length()返回字符串长度
fn:replace()将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split()将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith()测试输入字符串是否以指定的前缀开始
fn:substring()返回字符串的子集
fn:substringAfter()返回字符串在指定子串之后的子集
fn:substringBefore()返回字符串在指定子串之前的子集
fn:toLowerCase()将字符串中的字符转为小写
fn:toUpperCase()将字符串中的字符转为大写
fn:trim()移除首位的空白符

contains: fn:contains(,)containsIgnoreCase: {fn:containsIgnoreCase(“abcDefg”,’cd’) }
endsWith: fn:endsWith(abcDefg,ef)indexOf: {fn:indexOf(‘abcdefg’,’b’) }
join: fn:join(fn:split(abc,),,)length: {fn:length(“123456”) }
replace: fn:replace(abcefghij,efg,aaa)startsWith: {fn:startsWith(“aaabbbccc”,”aaa”) }
substring: fn:substring(abcd,1,3)substringAfter: {fn:substringAfter(‘abcdefg’,’cd’) }
substringBefore: fn:substringBefore(abcde,cd)toLowerCase: {fn:toLowerCase(‘AbC’) }
toUpperCase: fn:toUpperCase(AbcdEfg)trim: {fn:trim(’ abc’) }

输出结果:

contains:true
containsIgnoreCase:true
endsWith:false
indexOf:1
join:a,b,c
length:6
replace:abc-aaa-hij
startsWith:true
substring:bc
substringAfter:efg
substringBefore:ab
toLowerCase:abc
toUpperCase:ABCDEFG
trim:abc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值