为了账号安全,请及时绑定邮箱和手机立即绑定

Java篇-JSP

标签:
Java

一 : JSP简介

JSP-> Java Server Page ,是建立在Servlet规范上的动态网页开发技术,在JSP文件中,HTML代码与Java代码共同存在,其中HTML代码用来显示网页中静态内容的显示,Java代码用来实现网页中动态内容的显示. 为了与传统HTML有所区别,JSP扩展名为.jsp

二 : JSP特性

  • 跨平台 : 由于JSP是java语言编写的,可以使用Java API,所以是跨平台的,可以应用于不同的系统中,如Windows,Linux,MacOS等,从一个平台移植到另一个平台时,JSPJavaBean的代码并不需要重写编译,因为java字节码与平台无关,一次编译,到处运行.

  • 业务代码相分离 : 在使用JSP技术开发WEB应用时,可以将界面的开发与应用程序的开发分离开.开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容.在服务器端,JSP引擎(Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结果以HTML页面的形式返回到浏览器.

  • 组件重用 : JSP可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面中,甚至整个项目中,都可以重复使用这个JavaBean,同时JavaBean也可以应用到其他的Java应用程序中

  • 预编译 : 预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译.编译好的代码将被保存,用户下一次访问时,会直接执行编译好的代码.节省了服务器的CPU资源,提升了客户端的访问速度.

二 :  JSP原理

JSP本质就是一个Servlet,JSP的工作模式是请求/响应模式
用户在第一次访问的时候--->xxx.jsp--->xxx_jsp.java编译运行--->返回给用户看.

webp

运行原理

xxx.jsp文件被转换/翻译文件在 tomcat->work->Catalina->localhost->web项目->org->apache->jsp下


webp

生成文件路径

三 : JSP脚本与注释可见级别

通过上述原理可知.jsp最终会被翻译成.java的sevlet,所以我们写的脚本也最终会被翻译,接下来分析一下,具体会会被怎样的翻译

1.  jsp脚本 :

  • <%java代码%> :  内部的java代码翻译到service方法的内部

  • <%=java变量或者表达式> : 会被翻译成service方法内部out.print()

  • <%!java代码%> : 会被翻译成servlet的成员的内容

测试与证明 :

在.jsp中写下如下代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ page import="domain.*" %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>设置session</title></head><body>
    
    
    <%= 5+5 
    
    %>
    
    <%! 
        int a = 10;
    
    %>
    
    <%
        User user = new User();        user.setId(100);        user.setUsername("雪芙");        user.setPassword("123");        session.setAttribute("user", user);
    %></body></html>

然后我们去对应生成的.java文件中去找一下


webp

成员变量

webp

out.print

webp

service内部

2. jsp注释可见级别

  • HTML注释 :  < !--注释内容-->可见范围jsp源码,翻译后的servlet,页面显示html源码

  • java注释 : //单行注释, /多行注释/ -- 可见范围jsp源码,翻译后的servlet

  • jsp注释 : <%--注释内容--%>---可见范围jsp源码可见

四 : jsp指令

jsp的指令是指导jsp翻译和运行的命令

  • page指令 :

属性最多的指令 (实际开发中page指令默认)
根据不同的属性,指导整个页面特性.
格式 :<%@ page 属性名1 = "属性值1" 属性名2 = "属性名2"...%>
language --- jsp脚本中可以嵌入的语言种类(事实证明sun公司想多啦,没人用,所以只有java一种)
pageEncoding ---当前jsp文件本身编码,内部可以包含contentType
contentType ---response.setContentType(text/html;charset=UTF-8)同理
session ---是否jsp在翻译时自动创建session
import ---导入java的包
errorPage---当前页面出错后跳转到哪个页面
isErrorPage---当前页面是一个处理错误的页面

  • include指令 :

页面包含(静态包含)指令, 可以将一个jsp页面包含到另一个jsp页面中
格式 : <%@ include file = "被包含的文件地址"%>

  • taglib指令

在jsp页面中引入标签库(jstl标签库,struts2标签库)
格式 : <%@ taglib uri="标签地址" prefix="前缀"%>

五 : JSP内置对象

jsp被翻译成servlet之后, service方法中有9个对象定义,并初始化完毕,我们在jsp脚本中可以直接使用这9个对象

名称类型描述
outjavax.servlet.jsp.JspWriter用于页面输出
requestjavax.servlet.http.HttpServletRequest得到用户请求信息
responsejavax.servlet.http.HttpServletResponse服务器向客户端的回应信息
configjavax.servlet.ServletConfig服务器配置,可以取得初始化参数
applicationjavax.servlet.ServletContext所有用户的共享信息
pagejava.lang.Object指当前页面转换后的Servlet类的实例
pageContextjavax.servlet.jsp.PageContextJSP的页面容器
exceptionjava.lang.Throwable表示JSP页面所发生的异常,在错误页中才起作用

out对象 :
就是向客户端输出内容,out.write("dfdf")
out缓冲区默认8kb,可以设置成0代表关闭out缓冲区,内容直接写到response缓冲区

pageContext对象
jsp页面的上下文对象,page对象与pageContext对象不是一个东西.
pageContext是一个域对象

setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)

pageContext可以向指定的其他域中存取数据

        pageContext.setAttribute("name", "lisi", PageContext.REQUEST_SCOPE);
        pageContext.setAttribute("name", "wangwu", PageContext.SESSION_SCOPE);
        pageContext.setAttribute("name", "王八", PageContext.APPLICATION_SCOPE);

findAttribute(String name)
依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找

pageContext可以获得其他8大隐式对象

pageContext.getRequest()pageContext.getSession()

六 : jsp标签动作

  • 请求转发

<jsp:forward page="要转发的资源" />

    <jsp:forward page="/forward2.jsp"></jsp:forward>
  • 动态包含

    <jsp:include page="/include2.jsp"></jsp:include>

七 : out缓冲区与response缓冲区

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>out顺序</title></head><body>

    雪芙雪芙雪芙    <%
        out.write("思思思思思思思思思思");        response.getWriter().write("美美美美美美美美");
    %>
    <%="可可可可可可可可可可可可可可" %></body></html>

显示顺序 :

webp



作者:TianTianBaby223
链接:https://www.jianshu.com/p/13d845fe9e4c


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消