JSP
JSP
什么是JSP
Java Server Pages: java 服务端界面 也和Servlet一样,用于动态Web技术!
最大的特点:
1. 写JSP就像像写HTML
2. 区别:
1. HTML只提供静态界面
2. JSP可以嵌入JAVA代码,为用户提供动态数据
JSP原理
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP 最终都会翻译成java程序
JSP 本质上是也是一个Servlet
JSP基本语法
任何语言都有自己的语法,jsp作为java技术的一种应用,也有一些自己的扩充语法(了解,知道即可!!)java所有语法都支持!!
JSP表达式
<%-- jsp表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达式%>
--%>
<%= new java.util.Date()%>
JSP脚本片段
<%-- JSP脚本片段--%>
<%
int sum = 0;
for (int i = 0; i <100 ; i++) {
sum++;
}
System.out.println("<h1>SUM="+sum+"</h1>"); //转义
%>
JSP代码的在实现
<%
for (int i = 0; i < 5; i++) {
%>
<h1>Hello World</h1>
<%
}
%>
//输出5个Hello World
JSP声明
<%!
static {
System.out.println("Loading Servlet...");
};
private int globalVar = 0;
public void kuang(){
System.out.println("进入了方法");
}
%>
jsp声明会被编译到jsp生成的java的类中,其他的会被生成到_jspServlet方法中!
在jsp,嵌入java代码即可!
<%%>
<%=%>
<%!%>
<%--jsp注释--%>
<!--HTML注释-->
jsp的注释不会在客户端显示,但是HTML的就会!!
说明jsp会相较于html更安全
EL表达式
在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值
jsp指令
<%@ page args%>
<%--@include会将两个页面合二为一--%>
<%@include file="common/hearder.jsp"%>
<h1>网页主体</h1>
<%@include file="common/footer.jsp"%>
<%--jsp标签
jsp:include:拼接页面,本质还是3个
--%>
<jsp:include page="/common/hearder.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>
九大内置对象
PageContext 存东西
Request 存东西
Response
Session 存东西
Application (Servlet Context) 存东西
config (servlet config)
out
page
exception
<%
pageContext.setAttribute("namne1","周1");//保存的数据只在一个页面有效
request.setAttribute("namne2","周2");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("namne3","周3");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("namne4","周4");保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
java.lang.String
<%--脚本片段中的代码,会被原封不动生成到.JSP.java
要求:这里的代码:必须保证Java语法的正确性
--%>
<%
//从pageContext取出,我们通过寻找的方式来
//从底层到高层(作用域):page-->request-->session-->application
String name1 =(String) pageContext.findAttribute("namne1");
String name2 =(String) pageContext.findAttribute("namne2");
String name3 =(String) pageContext.findAttribute("namne3");
String name4 =(String) pageContext.findAttribute("namne4");
String name5 =(String) pageContext.findAttribute("namne5"); //不存在
%>
<%--使用EL表达式输出 ${} --%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3> <%= name5 %> </h3>
request: 客户端向服务器发送请求,产生的数据,用户看完就没用了, 比如: 新闻,用户看完没用的!
session: 客户端向服务器发送请求,产生的数据,用户用完之后还有用 , 比如: 购物车;
application: 客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可以使用, 比如:聊天数据
Jsp 标签 ,JSTL表达式,EL表达式
EL表达式: ${}
- 获取数据
- 执行运算
- 获取WEB开发的常用对象
JSP 标签
<%--jsp:include--%>
<%--
http://localhost:8080?jsptag.jsp?name=kuangshen&age=12
--%>
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name" value="kuangshen"></jsp:param>
<jsp:param name="age" value="12"></jsp:param>
</jsp:forward>
pom.xml
<!--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>
请求转发(Forward)和重定向(Redirect)的区别
forward(转发):
是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.
redirect(重定向):
是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
转发是服务器行为,重定向是客户端行为。
<%--取出参数--%>
名字:<%=request.getParameter("name")%>
年龄:<%=request.getParameter("age")%>
JSTL表达式
JSTL标签库的使用就是为了弥补HTML的不足: 他自定义了许多标签,可以供我们使用,标签功能和Java代码一样!
格式化标签
SQL标签
XML标签
核心标签(掌握部分)
JSTL使用步骤:
引入对应taglib
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用其中的方法
在tomcat中也要引入JSTL的包,否则会报错:JSTL解析错误
<%-- Tomcat中也要引入JSTL的包--%>
<html>
<body>
<h4>if测试</h4>
<hr>
<form action="JSTL_CoreIf.jsp" method="get">
<%--
EL表达式获取表单中的数据
${param.参数名} }
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果是管理员则提交成功--%>
<c:if test="${param.username =='admin'}" var="isAdmin">
<c:out value="管理员欢迎你~~!"/>
</c:if>
<%--自闭合标签--%>
<c:out value="${isAdmin}"/>
</body>
</html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--定义一个变量 值为85--%>
<c:set var="score" value="85"/>
<c:choose>
<c:when test="${score>=90}">
你的分数挺高!~
</c:when>
<c:when test="${score>=80}">
你的分数还行
</c:when>
<c:when test="${score>=70}">
你的分数一般
</c:when>
<c:when test="${score<=60}">
你的分数想死
</c:when>
</c:choose>
<%
ArrayList<String> people = new ArrayList<>();
people.add(0,"张三");
people.add(1,"李四");
people.add(2,"王五");
people.add(3,"赵六");
people.add(4,"田七");
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="3" step="2">
<c:out value="${people}"/> <br>
</c:forEach>
</body>
</html>
JavaBean
实体类
JavaBean有特定的写法:
- 必须有一个无参构造
- 属性必须私有化
- 必须有对应的get/set方法
一般来和数据库字段做映射 ORM
ORM对象关系映射
- 表——>类
- 字段—->属性
- 行记录——>对象
People表
id | name | age | address |
---|---|---|---|
1 | 小猪 | 3 | 广州 |
2 | 小猪 | 15 | 上海 |
3 | 小猪 | 88 | 北京 |
class People{
private int id;
private String name;
private int age;
private String address;
}
class A{
new people(1,"小猪",3,"广州");
new people(2,"小猪",15,"上海");
new people(3,"小猪",88,"北京");
}
<%@ page import="com.kuang.pojo.People" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<%
// People people =new People();
// people.setAddress();
// people.setId();
// people.setAge();
// people.setName();
%>
<jsp:useBean id="people" class="com.kuang.pojo.People" scope="page"/>
<jsp:setProperty name="people" property="name" value="小猪"/>
<jsp:setProperty name="people" property="id" value="1"/>
<jsp:setProperty name="people" property="age" value="3"/>
<jsp:setProperty name="people" property="address" value="广州"/>
姓名:<jsp:getProperty name="people" property="name" />
ID<jsp:getProperty name="people" property="id" />
年龄<jsp:getProperty name="people" property="age" />
地址<jsp:getProperty name="people" property="address" />
</body>
</html>