JSP
什么是JSP?
JAVA Server Pages: java服务器端页面,也和Servlet一样,用于动态web技术!
最大的特定:
写JSP就像在写HTML
区别:
- HTML只给用户提供静态的web数据。
- JSP页面中可以嵌入JAVA代码,为用户提供动态数据。
JSP原理
-
浏览器向服务器发送请求,不管访问什么资源,其实都是在首先访问Servlet.
-
JSP最终也会被转换成为一个java类
-
JSP本质就是Servlet,它继承了HttpServlet
- public void _jdpInit(); 初始化
- public void _jspDestroy; 销毁
- public void _jspService(req,resp); JSPService
- 判断请求
- 内置一些对象
以上的这些个对象我们可以在jsp页面中直接使用。 - 输出页面前增加的代码
在JSP页面中:
- 只要是java代码就会原封不动地输出。
- 如果是HTML代码,就会被转换为:out.write("")这样的格式输出到前端。
JSP基础语法
由于任何语言都有自己的语法,JSP作为Java技术的一种应用,它拥有自己扩充的语法,且对于所有java语法都支持。
-
jsp表达式
-
<%=变量/表达式%>
-
<%-- JSP表达式 作用:用来将程序的输出,输出到客户端 形式:<%= 变量或表达式%> --%> <%= new java.util.Date()%>
-
-
jsp脚本片段(JSP脚本间是逻辑连续的)
-
<% java脚本 %>
-
<%-- JSP脚本片段 作用:书写java脚本片段 形式:<% 脚本片段 %> --%> <% int sum = 0; for (int i = 0; i < 100 ; i++) { sum = sum+i; } out.println("<h1>Sum="+sum+"</h1>"); %>
-
-
脚本片段的再实现,可在JSP代码中间嵌入HTML元素
-
<%--脚本片段的再实现--%> <% int x = 10; out.println(x); %> <p>这是一个JSP文档!</p> <% int y = 2; out.println(y); %> <%--在Jsp代码中间嵌入HTML元素(大括号分出来)--%> <% for (int i = 0; i < 4; i++) { %> <h2>hello,carson!<%=i%></h2> <% } %>
-
上面的几种情况jsp被编译生成的java代码会被放在_jspService方法中。
-
Jsp声明(作用范围更大)
- <%! java脚本 %>
- 其被编译生成的java代码不会被放在方法中,而是直接放到生成的java类中。
<%-- JSP声明 特点:书写产生的java代码不会被放在jspService方法中,而是直接放在类中(jspService方法外) 格式: <%! 脚本片段 %> --%> <%! static { System.out.println("Loading Servlet!"); } private int globalVar = 0; public void carson(){ System.out.println("进入了方法carson!"); } %>
-
jsp注释(其注释不会在客户端显示,HTML注释就会)
- <%-- xx --%>
JSP基本指令
格式: <%@ page args… %> 【args代表各个参数u】
-
定制错误界面
-
通过JSP指令的方式
<%--Jsp指令之 定制错误界面--%> <%@ page errorPage="error/500.jsp" %>
-
通过web.xml配置文件的方式
<!--错误页面的相关定义--> <error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/500.jsp</location> </error-page>
-
-
显式声明一个错误界面
-
<%@ page isErrorPage="true"%>
-
-
引入文件指令(常用于引入共同的文件)
-
<%@ include file="路径" %> eg: <%@ include file="common/header.jsp"%>
-
JSP标签
-
引入文件
-
<jsp:include page="路径" /> eg: <jsp:include page="/common/header.jsp" />
-
问: <%@ include file=“common/header.jsp”%> 和
<jsp:include page="/common/header.jsp" />的区别?
- jsp标签引入文件需要/开头,jsp指令引入文件不需要/开头
- jsp指令引入多个文件 会将多个页面合二为一
- jsp标签引入多个文件,本质还是多个页面
-
携带参数
-
<%--携带两个参数--%> <jsp:forward page="/jsptag2.jsp"> <jsp:param name="name" value="carson"></jsp:param> <jsp:param name="age" value="21"></jsp:param> </jsp:forward> <%--目标页面:jsptag2.jsp中取出参数--%> 名字:<%=request.getParameter("name")%> 年龄:<%=request.getParameter("age")%>
-
-
使用JavaBean及设置和获取属性
-
<jsp:useBean id="people" class="com.carson.pojo.People" scope="page"></jsp:useBean> <jsp:setProperty name="people" property="id" value="1"></jsp:setProperty> <jsp:setProperty name="people" property="age" value="21"></jsp:setProperty> <jsp:setProperty name="people" property="address" value="SHENZHEN"></jsp:setProperty> <jsp:setProperty name="people" property="name" value="Carson张"></jsp:setProperty> id:<jsp:getProperty name="people" property="id"/> 姓名:<jsp:getProperty name="people" property="name"/> 年龄:<jsp:getProperty name="people" property="age"/> 地址:<jsp:getProperty name="people" property="address"/>
-
JSP内置对象
四大作用域:
pageContext < request < session < application
<%--内置对象--%>
<%
pageContext.setAttribute("name1","Carson张1号");//保存的数据仅在一个页面中有效
request.setAttribute("name2","Carson张2号");//保存的数据仅在一个请求中有效,请求转发会携带这个数据
session.setAttribute("name3","Carson张3号");//保存的数据仅在一个会话中有效,即从打开浏览器到关闭浏览器
application.setAttribute("name4","Carson张4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
<%
//从pageContext中取出,我们通过寻找的方式来
//从底层到高层(作用域),即page-->request-->session-->application
String name1 = (String)pageContext.findAttribute("name1");
String name2 = (String)pageContext.findAttribute("name2");
String name3 = (String)pageContext.findAttribute("name3");
String name4 = (String)pageContext.findAttribute("name4");
String name5 = (String)pageContext.findAttribute("name5");//不存在
pageContext.forward("pageContextDemo02.jsp");
%>
<%--使用EL表达式进行输出,即${}的形式--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>
<h3><%=name5%></h3>
-
pageContext 存东西,保存的数据只在一个页面中有效
-
request 存东西,保存的数据在一次请求中有效,请求转发会携带数据
-
response
-
session 存东西,保存的数据仅在一次会话中有效,打开到关闭浏览器
-
application 存东西,保存的数据在服务器中有效,打开到关闭服务器
-
config 等同于[ServletConfig]
-
out
-
page
-
exception
EL表达式
一般格式: ${参数名} 其与 JSP表达式:<%=%> 等价。
注:
- ${参数名} 对于不存在的值,不会在网页中输出null.
- <%=参数名%> 对于不存在的值,会将其输出为null
EL表达式获取表单中的数据格式: ${param.参数名}
EL:(Expression Language) 表达式语言
-
获取数据
-
执行运算
-
获取web开发的常用对象
-
是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
使用前提:
pom.xml中需要引入两个依赖
- JSTL依赖
- standard标签库
<!--JSTL表达式的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--standard标签库-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
JSTL标签
JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签供我们使用,标签的功能和java代码一样。
JSTL标签使用步骤:
- 引入对应的taglib,如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用JSTL标签库需要引入相应的taglib标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注意:在tomcat的lib目录中也要引入支持jstl的包,否则启动tomcat会报错。即将相关Jar包复制到tomcat的lib目录下。
- 使用其中的方法标签(代码示例)
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用JSTL标签库需要引入相应的taglib标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>coreforeach</title>
</head>
<body>
<%
ArrayList<String> people = new ArrayList<String>();
people.add(0, "张三");
people.add(1, "李四");
people.add(2, "王五");
people.add(3, "赵六");
people.add(4, "田七");
people.add(5, "carson");
//利用request存储
request.setAttribute("list",people);
%>
<%--var,每一次遍历出来的变量
items,要遍历的对象--%>
<c:forEach var="people" items="${list}">
<c:out value="${people}" /><br>
</c:forEach>
<hr>
<%--设置了 起始,终止,步长的遍历--%>
<c:forEach var="people" items="${list}" begin="1" end="5" step="2">
<c:out value="${people}"></c:out><br>
</c:forEach>
<hr>
</body>
</html>
JSTL标签包括:
-
格式化标签
-
SQL标签
-
XML标签
-
核心标签
-
<c:out> </c:out> <%--用于JSP显示数据,即像" <%=..%>" -->
-
<c:set></c:set> <%--用于保存数据 -->
-
<c:remove></c:remove> <%--用于删除数据 -->
-
<c:if></c:if> <%--于一般程序中的if语句类似 -->
-
<c:url></c:url> <%--使用可选参数创造URL -->
-
<c:forEach></c:forEach> <c:choose></c:choose> <c:when></c:when> <c:otherwise></c:otherwise> .......
-
更多关于JSTL的内容,可参考: JSTL菜鸟教程
JavaBean
javabean,又称实体类,pojo等,其有特定的写法要求:
- 必须要有一个无参构造
- 属性必须私有化
- 必须有对于的get/set方法
JavaBean一般用来和数据库的字段做ORM;
ORM:Object Relational Mapping(对象关系映射)
- 表<---->类
- 字段<---->属性
- 行记录<---->对象
The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号