JavaWeb基础四(JSP)

JSP

什么是JSP

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

最大的特点:

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

JSP原理

思路:JSP到底怎么执行的

服务器内部工作

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

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet

JSP最终也会被转换为Java类。

JSP本质上就是一个Servlet

public interface JspPage extends Servlet {
void jspInit();         //初始化
void jspDestroy(); }        //销毁

//JSPService
public interface HttpJspPage extends JspPage {
    void _jspService(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException;
}

1.判断请求,post还是get

2.内置一些对象

以下是JSP中的九大内置对象及其用途:

  • request: 代表客户端的请求,可以获取请求参数、头信息等。

  • response: 代表对客户端的响应,可以发送数据或重定向到其他页面。

  • session: 用于跟踪用户会话,可以存储用户特定的信息。

  • application: 代表整个Web应用程序的环境,用于共享数据。

  • out: 用于向客户端发送输出。

  • pageContext: 提供对JSP页面所有对象及命名空间的访问。

  • config: 提供对Servlet配置信息的访问。

  • page: 相当于Java中的this关键字,代表当前页面实例。

  • exception: 用于处理页面执行中的异常。

在JSP中以上对象可以直接使用

访问JSP页面流程:

在JSP页面中:

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

如果是HTML代码,就会封装为:

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

这样的格式输出到前端

JSP的基础语法

前提:注意在pom.xml文件下导入依赖

<dependencies>
  <!--Servlet依赖-->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>
  <dependency>
    <!--JSP的依赖-->
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
  </dependency>
  <dependency>
    <!--JSTL表达式的依赖-->
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <!--standard标签库的依赖-->
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency>
</dependencies>

任何语言都有自己的语法,JAVA有,JSP作为Java技术的一种应用,它拥有一些自己扩充的语法(了解,知道即可!)Java所有语法都支持

JSP表达式

<%=变量或者表达式%>

<%--jsp表达式:
作用:用来将程序的输出,输出到客户端
--%>

<%=new java.util.Date()%>

jsp脚步片段

<%Java代码%>

<%
    int sum=0;
    for (int i = 0; i <= 100; i++) {
        sum+=i;
    }
    out.println("<h1>Sum="+sum+"</h1>");
%>

脚步片段的再实现

<%=输出值%>

<%--在代码中嵌入HTML元素,循环输出5次HTML中的内容--%>
<%
    for (int i = 0; i < 5; i++) {
%>
    <p>Hello,World!</p>
<%
    }
%>

JSP声明

<%!  Java代码%>

<%--jsp声明--%>
<%!
    static {
        System.out.println("Loding Servlet");
    }
    private int globaVar=0;
    public void zhangsan(){
        System.out.println("进入了方法zhangsan");
    }
%>

JSP声明:会被编译到SP生成的Java的类中!

其他的如表达式和脚本片段会被生成到_jspServlet方法中!

<%--我是JSP的注释--%>

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

JSP指令

page指令:定义网页依赖属性,比如脚本语言、error页面、缓存需求等等

<%@page  属性%>

定制500错误页面:

定制错误页面方式二:

显示的声明,这是一个错误页面:

<%@page isErrorPage="true" %>

include指令:

在JSP(Java Server Pages)中,include指令用于在一个JSP页面中包含另一个文件的内容。这个文件可以是JSP文件、HTML文件或文本文件。根据包含的方式,include指令分为静态包含动态包含

<%@include file=""%>

9大内置对象

  • PageContext   存东西
  • Request  存东西
  • Response
  • Session    存东西
  • Application(ServletContext)     存东西
  • config(ServletConfig)
  • out
  • page   不用了解
  • exception

为以下对象存入数据:

通过findAttribute()拿出数据:

<%--脚本片段中的代码会被原封不动的生成在jsp.java中
要求:这里面的代码:必须保证Java语法的准确性--%>
<%
    //作用域(从高层到底层):page->request->session->application
    //pageContext取出,我们通过寻找的方式
    //JVM:双亲委派机制
    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");//不存在
%>
<%--使用EL表达式${}}输出最快--%>
<h1>取出的值为</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3><%=name5%></h3>

在同一个jsp页面中查找与不同页面中查找:可得到结果:

以上对象作用域级别:

public static final int PAGE_SCOPE = 1;
    public static final int REQUEST_SCOPE = 2;
    public static final int SESSION_SCOPE = 3;
    public static final int APPLICATION_SCOPE = 4;

在设置数据时,会选择作用域级别:

//scope作用域
public void setAttribute(String name, Object attribute, int scope) {
        switch(scope) {
        case 1:
            this.mPage.put(name, attribute);
            break;
        case 2:
            this.mRequest.put(name, attribute);
            break;
        case 3:
            this.mSession.put(name, attribute);
            break;
        case 4:
            this.mApp.put(name, attribute);
            break;
        default:
            throw new IllegalArgumentException("Bad scope " + scope);

也可在设置数据时,手动设置作用域

使用场景:

request:客户端向服务器发送请求,产生的数据,用户看完了就没用了,比如:新闻,用户看完了就没用了。

session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车。

qpplication:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可以使用,比如:聊天数据。

JSP标签、JSTL标签、EL表达式(暂定,后期补上)

<dependency>
  <!--JSTL表达式的依赖-->
  <groupId>javax.servlet.jsp.jstl</groupId>
  <artifactId>jstl-api</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <!--standard标签库的依赖-->
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>

EL表达式:${ }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值