JSP相关技术的使用与分析

JSP概述

  • JSP:简化Servlet设计,在HTML标签中嵌入Java代码,用来高效开发Web应用的动态网页

  • JSP文件在容器中会转换成Servlet执行,JSP是对Servlet的一种高级封装,本质还是Servlet

  • Tomcat会将JSP文件转换成Java代码,进而编译成.class文件运行,最终将执行结果通过response响应给客户端

JSP的使用

创建JSP

在web目录下,新建hello.jsp文件

普通脚本

直接在HTML代码中嵌入Java语句

<%
    out.println("北极");
%>

声明脚本

声明全局变量和方法

<%!
    private String name = "MAX";

    public String getName() {
        return name;
    }
%>

输出脚本

<%=getName()%>

JSP注释

JSP注释不会被发送到浏览器中,也不会被编译,在网页查看源代码时查看不到JSP注释

<%-- 注释 --%>

JSP指令

用来设置与整个JSP页面相关的属性

定义页面的依赖属性

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="404.jsp"%>
<%@ page import="java.util.Map" %>

包含其它文件

<%@include file="header.jsp"%>

引入标签库的定义

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

JSP动作标签

创建User对象

<jsp:useBean id="user" class="com.robot.pojo.User"></jsp:useBean>

查看编译之后的.java文件,找到创建对象的地方

com.robot.pojo.User user = null;
user = (com.robot.pojo.User) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.PAGE_SCOPE);
if (user == null){
user = new com.robot.pojo.User();
_jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.PAGE_SCOPE);
}

为User对象赋值

<jsp:setProperty name="user" property="username" value="机器人"></jsp:setProperty>
<jsp:setProperty name="user" property="password" value="123456"></jsp:setProperty>

获取User属性值

用户名:<jsp:getProperty name="user" property="username"/>
密码:<jsp:getProperty name="user" property="password"/><br>

转发以及传递参数

两种传递 方式,因为中文会有乱码,所以需要设置编码

<%
    request.setCharacterEncoding("utf-8");
%>
<jsp:forward page="index.jsp?address=beijing">
    <jsp:param name="phone" value="15141958888"/>
</jsp:forward>

接收

<%
    String address = request.getParameter("address");
    String phone = request.getParameter("phone");
%>
<%=address%>
<%=phone%>

JSP九大内置对象

  • request、response、session、application、config、exception、out、pageContext、page

四大域对象

pageContext

  • 当前JSP页面范围,一旦跳转则失效,通过setAttribute(“name”, value)存储数据,getAttribute(“name”)获取值
  • 可以获取其它八个内置对象或者操作其它对象的作用域,例如:pageContext.get

存储、获取数据

<%
//    存储值
    pageContext.setAttribute("username", "admin");
%>
<%
//    获取值
    Object username = pageContext.getAttribute("username");
    out.println(username);
%>

操作其它域对象

<%
//    将数据存入request域中
    pageContext.setAttribute("requestName", "requestData", PageContext.REQUEST_SCOPE);
%>
<%
//     获取request域中的数据
    pageContext.getAttribute("requestName", PageContext.REQUEST_SCOPE);
%>

移除数据

<%
//    移除,在四个域中全都都查找一遍,将符合条件的全部删除掉
    pageContext.removeAttribute("requestName");
//    移除,在指定的域中进行删除
    pageContext.removeAttribute("requestData", PageContext.REQUEST_SCOPE);
%>

查找数据

<%
    // 在四个域中进行查找
    String requestData = (String) pageContext.findAttribute("requestData");
%>

request

  • 一次请求有效,再次请求就无效了

Session

  • 一次会话有效,只要不关闭浏览器,就有效,比如用户登录信息

application

  • 所有用户共享的数据

原则:能用小的作用域,就不用大的作用域

EL表达式

主要用于获取作用域中的数据,用于替换域对象中的getAttribute(“name”);方法

使用

<%
    // 先将数据存储到域中
    request.setAttribute("name", "zbx");
%>
<%--    获取值--%>
${name}

获取引用类型

<%
    User user = new User("Robot", "123456");
    pageContext.setAttribute("user", user);
%>
${user}<br/>
${user.username}<br/>
${user.password}<br/>

获取列表

<%
    List<String> list = new ArrayList<>();
    list.add("北极");
    list.add("宇宙");
    list.add("太阳");
    list.add("月亮");
    pageContext.setAttribute("list", list);
%>
${list}
${list[0]}
${list[1]}
${list[2]}
${list[3]}<br>

JSP脚本在没有找到数据的时候会输出null,EL表达式在没有找到数据的时候不会输出任何内容,如果在JSP脚本中发生数组越界等,会报异常,但是在EL表达式中不会

获取Map

<%
    Map<String, String> map = new HashMap<>();
    map.put("beijing", "北京");
    map.put("shanghai", "上海");
    map.put("666", "杭州");
    pageContext.setAttribute("map", map);
%>
${map}
${map.get("beijing")}
${map.get("shanghai")}
${map["666"]}

JSTL

Java Server Pages Standard Tag Library,JSP标准标签库

可以对EL表达式获取的数据进行逻辑操作,完成数据展示

使用

先导入两个jar包,jstl.jar和standard.jar

然后在JSP页面中引用标签

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

赋值

<c:set var="username" value="robot" scope="page"></c:set>

可使用EL表达式直接获取到值

${username}

输出

<c:out value="使用out输出"></c:out>
<c:out value="${username}"></c:out><br>

if判断语句

<c:if test="${3>2}">
    <c:out value="输入"></c:out>
</c:if>

forEach循环语句

<%
    List<String> list = new ArrayList<>();
    list.add("北极");
    list.add("宇宙");
    list.add("太阳");
    list.add("月亮");
    pageContext.setAttribute("list", list);
%>
<c:forEach var="l" items="${list}">
    ${l}
</c:forEach>

选择语句

<c:set var="score" value="2"></c:set>
<c:choose>
    <c:when test="${score==1}">
        <c:out value="is 1"></c:out>
    </c:when>
    <c:when test="${score==2}">
        <c:out value="is 2"></c:out>
    </c:when>
    <c:otherwise>
        <c:out value="is other"></c:out>
    </c:otherwise>
</c:choose>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值