JSP入门

1、什么是JSP

jsp的全称是:java servlet pages,java的服务器页面。

主要作用:替代servlet程序回传html页面的数据,因为servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都极高

最大的特点:

  • 写jsp就像在写html。

  • 区别:

    • html只给用户提供静态的数据
    • jsp页面中可以嵌入java代码,为用户提供动态数据。

2、JSP原理

2.1、JSP本质

先说结论:jsp页面本质上是一个servlet程序。

当我们第一次访问 jsp 页面的时候。Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且对它进行编译成为.class 字节码程序。

java 源文件代码发现jsp继承了HttpJspBase。

然后我们去看HttpJspBase的源码发现他继承了HttpServlet。说明了jsp间接继承了HttpServlet,也证明了jsp就是servlet。

通过翻译的 java 源代码我们就可以得到结果:jsp 就是 Servlet 程序

我们去观察翻译出来的 Servlet 程序的源代码,可以发现。其底层实现,也是通过输出流。把 html 页面数据回传给客户端。

jsp运行流程图:

2.2、分析JSP源码

1.判断请求

2.内置了一些对象

3.输出页面前增加的代码

4.以上这些代码中的对象,我们可以直接在jsp中使用。

结论:

在jsp页面中,只要是java代码就会原封不动的输出。如果是html代码,就会转成out.write("html代码")输出。

3、JSP基础语法

3.1、jsp表达式

<%--
    jsp表达式
    作用:用来将程序的输出,输出到客户端
    格式:<%= 变量名或表达式 %>
--%>
<%= new Date()%>

3.2、jsp脚本片段

<%--
    jsp脚本片段(比上面的少一个等号)
    作用:脚本里可以写java代码
    格式:<% jsp脚本片段 %>
--%>
<%
int num = 0;
for (int i = 0; i < 100; i++) {
    out.println("<h1>sum"+(num+=i)+"</h1>");
}
%>

3.3、java代码中嵌套html元素

创建两个脚本片段把for循环分解成两部分,中间加html代码。然后在html代码中加入表达式,运行后发现for循环里面的html标签循环了8次,表达式里的变量也正常输出到页面了。

  <%
    for (int i = 0; i <8 ; i++) {
  %>
  <h1>hellojsp<%=i%></h1>
  <%
    }
  %>

3.5、JSP指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%-- 指定页面类型和编码和编程语言 --%>
<%@ page errorPage="" %><%-- 自定义错误页面 --%>
<%@ page pageEncoding="" %><%-- 指定页面编码 --%>
<%@ page import="" %><%-- 导包 --%>

<%-- 这个include file会在生成的java代码中合二为一为一个页面 --%>
<%@include file="header.jsp"%>
<%
java代码
%>
<%@include file="footer.jsp"%>

<%-- jsp:include 不会把上下连个页面合成一个 --%>
<jsp:include page="header.jsp"/>
<%
java代码
%>
<jsp:include page="footer.jsp"/>

注:在xml里也可以自定义错误页面

<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>

3.4、JSP声明片段

语法:<%! java代码 %>

  <%!
    static {
      System.out.println("进入了静态代码块");
    }
    private int init;
    private void wsn(){
      System.out.println("进入了wsn这个方法");
    }
  %>

3.5、小结:

通过上面的内容我们知道jsp执行时会被转为java代码,而一个jsp页面就对应一个类。

通过我们查看生成的java源码发现:

  • 上面的jsp表达式jsp脚本片段,实际上都生成在一个_jspService方法内。

  • 而jsp声明片段中的代码不会生成在这个方法中,而是在这个jsp生成的java类下,也就是说我们在声明片段中可以定义全局的变量定义一些方法

jsp的注释<%-- --%>不会再客户端显示

html的注释会在客户端显示

4、九大内置对象

  • pageContext //存数据
  • Request //存数据
  • Response
  • Session //存数据
  • Application //和ServletContext是一个东西 存数据
  • config //ServletConfig
  • out
  • page //不用
  • exception
<%-- 内置对象 --%>
<%
pageContext.setAttribute("name1","wsn1");//保存的页面只在一个页面中有效
request.setAttribute("name2","wsn2");//保存的数据只在一次请求中有效,请求转发会携带这个数据
application.setAttribute("name3","wsn3");//保存的数据在一次会话中有效,从打开浏览器到关闭浏览器
session.setAttribute("name4","wsn4");//在服务器中有效,从打开服务器到关闭服务器
%>

<%-- 这里我们不用各自对象的get方法取值,而是用pageContext的find方法寻找--%>
<%
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
%>

<%--今后我们尽量都用EL表达式输出,用jsp表达式效果也一样--%>
<h1>${name1}</h1>
<h1>${name2}</h1>
<h1>${name3}</h1>
<h1>${name4}</h1>

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

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

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

5、JSP标签、JSTL标签、EL表达式

xml依赖

<!--jsp依赖-->
<dependency>
    <groupId>com.wsn</groupId>
    <artifactId>javaweb-jsp</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<!--jstl-->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<!--标签库-->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

5.1、EL表达式:${ }

  • 获取数据
  • 执行运算
  • 获取web开发常用的对象
  • 调用java方法(不用,但是它可以这么做)

5.2、JSP标签(不用)

<%-- 这个包含刚才用过不再赘述 --%>
<jsp:include page="">

<%--jsp:forward转发跳转到另一个页面--%>
<%--jsp:param 可以让转发携带参数,另一个也面也可以取到参数--%>
<%--location:8080/111.jsp?name=wsn&age=11--%>
<jsp:forward page="/111.jsp">
  <jsp:param name="name" value="wsn"/>
  <jsp:param name="age" value="11"/>
</jsp:forward>

5.2、JSTL标签

JSTL标签标签库的使用就是为了弥补HTML标签的不足,他自定义了许多标签,可以供我们使用。标签的功能和java代码一样。

用下面的标签都需要引用对应指令(网上查)<%@ taglib prefix="..." uri="..."%>

反正不用这玩意,了解即可。

  • 核心标签
  • 格式化标签
  • sql标签
  • xml标签
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo wsn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值