JAVA JSP基础教程

什么是JSP

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计

第一行代码

jsp整体架构

<%@ 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=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        书写java代码
    %>
    <!-- 相当于out.print() -->
    <%= 2+3 %>
    <!-- 这里正常书写HTML语言 -->
    <!--  表示在类中定义全局成员,和静态块。 -->
     <%! %>
</body>
</html>

JSP的三个指令

page import和java代码中的import是一样的
Include :
静态包含:把其它资源包含到当前页面中 <%@ include file=”/include/1.jsp” %>
动态包含:编译成 .java文件 在合并 代码是逐行执行 当执行到动态包含时 才会编译被包含的页面 这样会生成两套文件
< jsp:include page=”/include/1.jsp”>< /jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
taglib标签 导入jstl核心库
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %> prefix=”c” 表示给jstl标签库中的标签 起一个别名

JSP的6个动作

< jsp:include > 动态包含
< jsp:forward> 请求转发
< jsp:param> 设置请求参数
< jsp:useBean> 创建一个对象
< jsp:setProperty> 给指定的对象属性赋值
< jsp:getProperty> 取出指定对象的属性值

< jsp:useBean> 示例:

<%
        // 创建一个user对象 普通的设置获取
        User user = new User();
        user.setName("james");
        user.setPwd("123");
        out.print(user.getName());
    %>
    // 使用标签设置获取
    <jsp:useBean id="user1" class="com.james.User" />
    <jsp:setProperty property="name" name="user1" value="Tom"/>
    <jsp:setProperty property="pwd" name="user1" value="456"/>
    <jsp:getProperty property="name" name="user1" />
    <jsp:getProperty property="pwd" name="user1" />

JSP的9个内置对象

request
response
session
application
exception
page 当前servlet实例 this
config
out
pageContext 指当前页面 域对象

pageContext代码示例

<!-- 测试pageContext 域 -->
    <%
        /* 该域对象 只在本页面有效 出了页面获取不到 */
        pageContext.setAttribute("page", "pageContext");
    %>
    <!-- 携带请求的参数 相当于在网址后面进行拼接
                /2.jsp?username=james&password=123
        -->
    <!-- JSP动作标签--转发 -->
    <!-- 注意! 不要在中间加注释 -->
    <jsp:forward page="/2.jsp">
        <jsp:param value="james" name="username" />
        <jsp:param value="123" name="password" />
    </jsp:forward>

由于pageContext域 只能作用在当前页面 因此 应用范围极其狭小 但是这个对象中的findAttribute()方法可以找到所有的域对象 搜索范围是从小域到大域

<!-- 测试 域中的查找顺序 -->
    <%
        /* 一般系统方法中 需要一个int参数 一般会是常量 */
        /* 只要有 pageContext 就能向各个域中添加值 参数三 表示对应域的常量 */
        pageContext.setAttribute("p", "pageContext", pageContext.PAGE_SCOPE);
        pageContext.setAttribute("p", "request", pageContext.REQUEST_SCOPE);
        pageContext.setAttribute("p", "session", pageContext.SESSION_SCOPE);
        pageContext.setAttribute("p", "application", pageContext.APPLICATION_SCOPE);
    %>
    <!-- 从小到大找 -->
    <%=pageContext.findAttribute("p") %>
    <!-- 使用el表达式 获取域中数据 -->
    <!-- 实际上使用pageContext.findAttribute 这个方法 -->
    ${p }

EL表达式

expression language 表达式语言 简化jsp中java代码开发。它不是一种开发语言,是jsp中获取数据的一种规范

代码示例:

<!-- 域中 保存对象 使用el表达式获取 -->
    <%
        User user = new User();
        user.setUsername("james");
        user.setPassword("123");
        // 添加地址对象
        Address address = new Address();
        address.setCity("china");
        user.setAddress(address);
        out.print(user);
        request.setAttribute("u", user);
        ArrayList<String> list = new ArrayList();
        list.add("james");
        list.add("Tom");
        list.add("Miku");

        HashMap<String,Integer> map = new HashMap();
        map.put("user", 123);
        map.put("pass", 456);
        map.put("addre", 789);

        request.setAttribute("map", map);
    %>
    <br />
    <!-- 实际上调用get方法 前提必须有get方法 -->
    <!-- 如果User对象中 有个属性 也是个对象 -->
    ${u.username }
    <!-- javaBean 导航 直接使用 -->
    <br />
    ${u.address.city }
    <!-- 使用[] 获取值-->
    <br />
    ${u["username"] }
    <br />
    <!-- 注意 使用[] 要加"" 或者'' -->
    ${u['username'] }
// 集合获取方式
    ${list[0] }
    // 注意!MAP集合不能使用[]
    ${map.user }

empty

empty 判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true

    <!-- 使用el 表达式 判断 empty 空值 -->
    <%
        String str1 = null;
        request.setAttribute("str1", str1);

        String str2 = "";
        request.setAttribute("str2", str2);

        ArrayList<String> list = new ArrayList();
        list.add("james");
        request.setAttribute("list", list);

        ArrayList<String> list1 = new ArrayList();
        request.setAttribute("list1", list1);

        ArrayList<String> list2 = null;
        request.setAttribute("list2", list2);
        /* 测试三目运算符 */       
        String sex = "man";
        request.setAttribute("sex", sex);
    %>
    <!-- 判断是否为空 只要没有值 就返回true -->
    <%-- ${empty str1} ${empty str2} --%>
    ${empty list} ${empty list1} ${empty list2}
    <!-- 支持三目运算符 -->
    ${empty list2 ? "我是前面的":"我是后面的" }

EL表达式的隐式对象

可以在EL表达式中直接使用的对象

示例:

pageContext.setAttribute("p", "pageContext", pageContext.PAGE_SCOPE);
${pageScope.p } 

// 获取工程名
${pageContext.request.contextPath }

    <!-- 取请求头 -->
    ${header["User-Agent"] }
    <!-- 取cookie中的值 -->
    ${cookie.JSESSIONID.value }

JSTL

JSTL JavaServerPages Standard Tag Library)JSP标准标签库
作用:使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
使用前加入 <%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
框架下载地址:https://mvnrepository.com/

示例:

//声明一个变量
< c:set var="num" value="10" scope="session">< /c:set>
//输出变量:两者没有区别
<c:out value="${num }"></c:out>
${num }

<!-- 逻辑表达式 if choose -->
    <c:if test="${i < 5 }">
        aaaaa
    </c:if>

    <c:if test="${i > 5}">
        bbbb
    </c:if>
    <c:choose>
        <c:when test="${i==5 }">5</c:when>
        <c:when test="${i==10 }">10</c:when>
        <c:otherwise>haha</c:otherwise>
    </c:choose>

如何遍历循环?

<%
        ArrayList<String> list = new ArrayList();
        list.add("james");
        list.add("Tom");
        list.add("Miku");
        list.add("Hery");
        request.setAttribute("list", list);
    %>
    <!-- 循环 step循环增量 var 表示容器中的对象-->
    <c:forEach var="i" begin="0" end="${list.size()}" step="1"> 
        ${list[i] } 
        <br />
    </c:forEach>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值