Java后台之路(14)-JSP
来源:互联网 发布:hadoop执行过程源码 编辑:程序博客网 时间:2024/06/01 08:49
EL表达式
EL表达式是JSP中获取数据的一种规范,语法格式:${}
,我们依旧举例说明:
取值
// 我们在Session存入了数据namesession.setAttribute("name", "戚继光");// 两种方式取出数据session.getAttribute("name");${name}//获取Person类的age属性值Person person;person.getAge();${person.age}
简单运算
// 非空判断${empty object}// 三目运算符${empty object ? "true" : "false"}
EL隐式对象
- pageContext,对应于JSP页面中的pageContext对象;
- pageScope,代表page域中用于保存属性的Map对象;
- requestScope,代表request域中用于保存属性的Map对象;
- sessionScope,代表session域中用于保存属性的Map对象;
- applicationScope,代表application域中用于保存属性的Map对象;
- param,表示一个保存所有请求参数的Map对象;
- paramValues,表示一个保存了所有请求参数的Map对象,它对于某个请求参数返回一个string类型数组;
- header ,表示一个保存了所有http请求头字段的Map对象;
- headerValues,表示一个保存了所有http请求头字段的Map对象,返回string类型数组;
- cookie,表示一个保存了所有cookie的Map对象;
- initParam,表示一个保存了所有web应用初始化参数的map对象。
JSTL简介
从JSP 1.1规范开始JSP就支持使用自定义标签,使用自定义标签极大地降低了JSP页面的复杂度,同时增强了代码的重用性,所以自定义标签在WEB应用中被广泛使用。故,许多WEB应用厂商都开发出了自己的一套标签库,这导致出现了许多功能相同的标签,令开发人员手忙脚乱,无所适从。为了解决该问题,Apache开发了一套用于解决这些常用问题的自定义标签库,这套标签库被SUN公司定义为标准标签库(The JavaServer Pages Standard Tag Library),简称JSTL。在开发中可使用JSTL实现JSP页面中逻辑处理,如判断、循环等等操作。
JSTL库包含5个类别。
如何集成
1.官网jar包,jstl.jar和standard.jar放入到\WebRoot\WEB-INF\lib
下。
2.根据不同的JSTL库类别,在jsp中添加相应的依赖。
JSTL类别
1. 核心标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2. 格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
3. SQL标签
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
4. XML标签
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
5. JSTL函数
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
常用的标签库参照这里。
JSP连接数据库
1. jsp引入MySQL
这里下载mysql驱动jar包,将其放入到Tomcat的lib目录下;
2. sql的简介
/** * 连接数据库 * var,连接的别名 */ <sql:setDataSource var="myDB" driver="com.mysql.jdbc.Driver" user="root" password="root" url="jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&useSSL=true&characterEncoding=utf-8" />/** * 查询语句 * var,查询结果存放变量 * dataSource,依赖的数据别名 */<sql:query var="queryRes" dataSource="${myDB }" > select * from person;</sql:query>/** * 数据插入、更新、删除 */<sql:update var="updateRes" dataSource="${myDB }"> INSERT INTO person(pname, page, pcity) VALUES("郑成功", 60, "台湾");</sql:update>
来个例子吧:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ page import="java.io.*,java.util.*,java.sql.*" %><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%><html><head> <title>sql.jsp</title></head><body> <sql:setDataSource var="myDB" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&useSSL=true&characterEncoding=utf-8" user="root" password="root"/> <sql:update var="updateRes" dataSource="${myDB }"> INSERT INTO person(pname, page, pcity) VALUES("郑成功", 60, "台湾"); </sql:update> <sql:query var="queryRes" dataSource="${myDB }" > select * from person; </sql:query> <table border="1" width="50%"> <tr> <th>id</th> <th>name</th> <th>age</th> <th>city</th> </tr> <c:forEach var="row" items="${queryRes.rows }"> <tr> <th><c:out value="${row.pid}"/></th> <th><c:out value="${row.pname}"/></th> <th><c:out value="${row.page}"/></th> <th><c:out value="${row.pcity}"/></th> </tr> </c:forEach> </table></body></html>
JavaBean
一个最简单的用法:
<jsp:useBean id="date" class="java.util.date"><p>日期为:<%=date %></p>
在jsp中生成一个Java类对象,我们看一个Person这个类;
Person.class
public class Person { private int pid; private String pname; private int page; private String pcity; //setter、getter省略}
javabean.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ page import="java.io.*,java.util.*,java.sql.*" %><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%><html><head> <title>javabean.jsp</title></head><body> <jsp:useBean id="person" class="model.Person" > <jsp:setProperty name="person" property="pid" value="1"/> <jsp:setProperty name="person" property="pname" value="戚继光"/> <jsp:setProperty name="person" property="page" value="24"/> <jsp:setProperty name="person" property="pcity" value="蓟州"/> </jsp:useBean> <p><c:out value="${person.pid }" /> </p> <p><c:out value="${person.pname }" /> </p> <p><c:out value="${person.page }" /> </p> <p><c:out value="${person.pcity }" /> </p></body></html>
JSP自定义标签
我们通过例子来理解它的用法和作用:
一个简单的显示例子,定义一个打印”hello world”的例子,分以下三步:
- 创建继承SimpleTagSupport的HelloTag类,实现其doTag()方法;
- 在/webRoot/WEB-INF/custom.tld中声明tag;
- 在jsp中调用。
ShowTag.class
public class ShowTag extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); }}
custom.tld
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag> <name>Show</name> <tag-class>tag.ShowTag</tag-class> <body-content>empty</body-content> </tag></taglib>
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ page import="java.io.*,java.util.*,java.sql.*" %><%@ page import="javax.servlet.http.*,javax.servlet.*" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%><%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html><head> <title>test.jsp</title></head><body> <ex:Show /></body></html>
1. 带内容的自定义标签
ShowTag.class
StringWriter sw = new StringWriter();@Overridepublic void doTag() throws JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString());}
custom.ltd
<tag> <name>Show</name> <tag-class>tag.ShowTag</tag-class> <body-content>scriptless</body-content></tag>
test.jsp
<ex:Show > 戚继光是民族英雄</ex:Show>
2. 自定义属性的标签
ShowTag.class
public class ShowTag extends SimpleTagSupport{ private String message; @Override public void doTag() throws JspException, IOException { if( message!=null ){ // 从属性中获取信息 JspWriter out = getJspContext().getOut(); out.println(message); }else { // 从内容体中获取信息 StringWriter sw = new StringWriter(); getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); } } public void setMessage(String message) { this.message = message; }}
custom.ltd
<tag> <name>Show</name> <tag-class>tag.ShowTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>message</name> </attribute></tag>
test.jsp
<ex:Show message="戚继光是民族英雄" />
- Java后台之路(14)-JSP
- Java后台之路(12)-JSP
- Java后台之路(13)-JSP
- java web之路 jsp jsp:setProperty
- 后台之路(一):java基础回顾
- Java后台之路(04)-JDBC
- Java后台之路(01)-MySql
- Java后台之路(02)-MySql
- Java后台之路(03)-MySql
- Java后台之路(05)-XML
- Java后台之路(06)-Tomcat
- Java后台之路(08)-Servlet
- Java后台之路(07)-HTTP
- Java后台之路(09)-Servlet
- Java后台之路(10)-Cookie
- Java后台之路(11)-HttpSession
- Java后台之路(17)-AJAX、Listener
- Java后台之路(18)-MyBatis
- 3. 后期工作(组长) 3.1 后期组长的工作分为三部分 3.1.1 审查合并 3.1.2 发布项目和版本变更 3.1.3 Gitlab加标签(项目上线以后)
- 使用分层实现业务处理
- Failure to transfer org.apache.maven.plugins:maven-war-plugin:pom:xxx
- Activity创建过程
- TensorFlow学习---tf生成数据的方法
- Java后台之路(14)-JSP
- PHP自带方法验证邮箱、URL、IP是否合法
- thinking in java 阅读笔记 第四章 初始化和清除
- Vue.js的全局/局部组件填坑记
- test
- 安卓开发之自定义相机时图片变形问题
- 树学习(6)
- struts、spring 源码下载地址
- [LeetCode]600. Non-negative Integers without Consecutive Ones