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>
posted @ 2021-10-10 13:58  昊子豪  阅读(61)  评论(0编辑  收藏  举报