JSP相关技术的使用与分析

tech2022-08-08  152

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>
最新回复(0)