JSP

1. 什么是JSP

Java Server Pages : Java服务器端页面,也和Servlet一样,用于动态Web技术。

最大的特点:

  • 区别:
    • HTML只给用户提供静态的数据
    • JSP页面中可以嵌入JAVA代码,为用户提供动态数据

2. 运行原理

tomcat中有一个work目录;

IDEA中使用Tomcat的会在IDEA的tomcat中生产一个work目录

JSP页面会被转译成Java程序,继承自Servlet类。

浏览器请求资源的时候其实都是在请求Servlet。

3. 内置对象

final jakarta.servlet.jsp.PageContext pageContext;  //页面上下文
jakarta.servlet.http.HttpSession session = null;    //session
final jakarta.servlet.ServletContext application;   //applicationContext
final jakarta.servlet.ServletConfig config;         //config
jakarta.servlet.jsp.JspWriter out = null;           //out
final java.lang.Object page = this;               //page:当前
HttpServletRequest request                        //请求
HttpServletResponse response                      //响应

输出页面增加的代码

response.setContentType("text/html");       //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
                                          null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
image-20210908095519935
Image

在JSP页面中,

只要是 JAVA代码就会原封不动的输出

如果是HTML代码,就会被转换为

out.write("<html>\r\n");

这样的格式,输出到前端.

4. 基础语法

JSP作为Java技术的一种应用,它拥有一些自己扩充的语法,Java所有语法都支持。

4.1. 注释

JSP的注释,不会在客户端显示。

HTML的注释会在客户端显示。

<%--Comments--%>

4.2. 表达式

<%--JSP表达式
  作用:用来将程序的输出,输出到客户端
  <%= 变量或者表达式%>
--%>
<%=new java.util.Date() %>

4.3. 脚本片段

<%--jsp脚本片段--%>
<%
int sum = 0;
for (int i = 1; i <=100 ; i++) {
  sum+=i;
}
out.println("<h1>Sum="+sum+"</h1>");
%>
<%
int x = 10;
out.println(x);
%>
<p>这是一个JSP文档</p>
<%
int y = 2;
out.println(y);
%>

<hr>


<%--在代码嵌入HTML元素--%>
<% for (int i = 0; i < 5; i++) { %>
<h1>Hello,World  <%=i %> </h1>
<% } %>

4.4. 声明

JSP声明会被编译刀JSP生成的Java类的前端,其他的会被生成到_jspService方法中。

<%!
static {
  System.out.println("Loading Servlet!");
}

private int globalVar = 0;

public void test(){
  System.out.println("进入了方法test!");
}
%>
<%%>
<%=%>
<%!%>

<%--注释--%>

4.5. 出错页面

<%@page errorPage="" %>    <%--声明出错页的地址,Servlet发生错误会跳转--%>
<%@page isErrorPage="" %> <%--是否是出错页--%>

也可以在xml中进行配置

<error-page>
  <error-code></error-code>
  <location></location>
</error-page>

4.6. 指令

<%@page args.... %>
<%@include file=""%>


<%@include file="common/header.jsp"%>
<h1>网页主体</h1>

<%@include file="common/footer.jsp"%>

<hr>


<%--jSP标签
    jsp:include:拼接页面,本质还是三个
    --%>
<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>

<%@include file=""%>的方式会简单的把多个jsp文件拼凑生成同一份。但当这些jsp文件中含有相同的变量名声明片段的时候,就会有500错误。适合拼凑html文件。

<jsp:include page=""/>的方式会按照声明的文件分别生成多份Servlet。适合拼凑jsp文件。

5. 九大内置对象

  • PageContext
  • Request
  • Response
  • Session
  • Application
  • Config
  • Out
  • Page
  • Exception
pageContext.setAttribute("name1","name1"); // 保存的数据只在一个页面中有效
request.setAttribute("name2","name2"); // 保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","name3"); // 保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","name4");  // 保存的数据只在服务器中有效,从打开服务器到关闭服务器
  • request:客户端向服务器发送请求产生的数据,用户看完就没有用了。比如:新闻
  • session:客户端向服务器发送请求产生的数据,用户一会还有用。比如:购物车
  • application:客户端想服务器发送请求产哼的数据,一个用户用完了,其他用户还可能使用。

6. JSP标签 JSTL标签 EL表达式

EL表达式:${}

作用:

  • 获取数据
  • 执行运算
  • 获取wbe开发的常用对象

6.1. JSP标签

jsp转发

<jsp:forward page="/test.jsp">
    <jsp:param name="name" value="admin"></jsp:param>
    <jsp:param name="age" value="18"></jsp:param>
</jsp:forward>

6.2. JSTL表达式

作用:弥补HTML标签的额不足,自定义许多标签可供使用。标签共嗯感和Java代码一样。

  1. 格式化标签
  2. SQL标签
  3. XML标签
  4. 核心标签

6.3. 核心标签

标签 描述
<c:out> 用于在JSP中显示数据,就像<%= ... >`
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when><c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL

Demo

<c:if>

<form action="if.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}"/>

<c:choose>

<c:when>

<c:set var="score" value="97"/>

<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>

<c:forEach>

<%
    ArrayList<String> peoples = new ArrayList<>();
    peoples.add(0,"张三");
    peoples.add(1,"李四");
    peoples.add(2,"王五");
    peoples.add(3,"赵六");
    request.setAttribute("list",peoples);
%>

<%--
var , 每一次遍历出来的变量
items, 要遍历的对象
begin,   哪里开始
end,     到哪里
step,   步长
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/> <br>
</c:forEach>

<hr>

<%--begin开始的元素,end最后一个元素,步长为2--%>
<c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
    <c:out value="${people}"/> <br>
</c:forEach>

7. JavaBean

实体类

JavaBean特定写法:

  1. 必须有一个无参构造
  2. 属性比如私有化
  3. 必须有对应的getter/setter方法

作用:一般用来和数据库的字段做映射 ORM

ORM:对象关系映射

  1. 表-->类
  2. 字段-->属性
  3. 行记录-->对象
package com.gs.pojo;

/**
 * @author admin
 * @date 2021/9/8 4:47 下午
 */
public class Person {
    private int id;
    private String name;
    private int age;

    public Person() {
    }

    public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
<%
    //Person person = new Person();
    //person.setId(1);
    //person.setName("rootwhois");
    //person.setAge(18);
%>

<jsp:useBean id="person" class="com.gs.pojo.Person" scope="page" />
<jsp:setProperty name="person" property="id" value="1"/>
<jsp:setProperty name="person" property="name" value="rootwhois"/>
<jsp:setProperty name="person" property="age" value="18"/>

<jsp:getProperty name="person" property="id"/>
<jsp:getProperty name="person" property="name"/>
<jsp:getProperty name="person" property="age"/>
Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2023-03-05 10:55:52

results matching ""

    No results matching ""