jsp

jsp(java server pages)的作用

  • servlet:
    • 缺点:不适合设置html响应体,需要设置大量的response.getWriter().print(html标签)
    • 优点:动态资源,可以编程。
  • html
    • 缺点:html是静态页面,不能包含动态信息
    • 优点:不用为输出html标签而发愁
  • jsp(java server pages)
    • 优点:在原有的html的基础上添加java脚本,构成jsp页面

jsp和Servlet的分工

  • jsp
    • 作为请求发起页面,例如显示表单,超链接
    • 作为请求结束页面,例如显示数据
  • Servlet
    • 作为请求中梳理数据的环节
      这里写图片描述

jsp的组成

  • jsp = html + java脚本 + jsp标签(指令)
  • jsp中无需创建即可使用的对象一共有9个,被称之为9大内置对象。例如:request对象,out对象
  • 3种Java脚本
    • <%…%>:Java代码片段,用于定义Java语句
    • <%=…%>:Java表达式,用于输出,用于输出一条表达式或者变量的结果
    • <%!…%>:声明,用来创建类的成员变量或者成员方法,类中可以做什么,他就写什么。

jsp九大内置对象

  • 输入输出对象:
    • out(jspWriter) 用于向浏览器客户端输出数据,等同于response.getWriter()
    • response(HTTPServletResponse) 封装了 服务器的相应信息
    • request(HTTPServletRequest) 封装了客户端的请求信息
  • 通信控制对象
    • pageContext(页面上下文对象) 提供了对jsp页面所有对象以及命名空间的访问
    • session(HttpSession) 用来保存会话信息,可以实现在相同用户的不同请求之间共享数据
    • application(ServletContext) 应用对象,可以在不同的 用户之间共享数据
  • Servlet对象
    • page(当前jsp页面编译后的Java原型)对象 指向了当前jsp本身,指向了当前对象
    • config(ServletConfig)对象 封装了应用程序的配置信息,
  • 错误处理对象
    • exception对象 封装了jsp程序执行过程中发生的异常或者 错误信息,只有在错误页面才可以使用这个信息
      这里写图片描述

jsp原理

  • jsp其实就是一种特殊的Servlet
    • 当jsp页面第一次被访问时,服务器会吧jsp页面编译成Java文件,(HttpJspBase是HttpServlet的一个子类)
    • 在编译成class文件
    • 创建该类的对象
    • 最后调用它的service方法(jsp编译后 额内容除了声明的成员,都是放在这个方法内)
    • 第二次请求同一个jsp页面是,直接调用它的service方法
    • ==请看tomcat路径下work–>Catalina–>…xxx_jsp.java==这里写图片描述
    • 打开编译后的Java 文件,这个类间接的实现了servlet接口这里写图片描述
  • tomcat的work目录下可以找到jsp对应的.java源代码
  • jsp编程的Java文件的规则
    • 如果是Java代码就留下
    • 如果不是直接输出(html结构使用out.Write输出,但是我们定义的输出使用out.print输出)
      这里写图片描述

jsp注释

  • <%– 注释 –%>这种方式注释的内容,经过编译后注释内容就不会存在了
  • 这种注释(html注释),会一直存在,并且发送到客户端,只是客户端不显示而已。
  • <% Java 代码的注释%> java 代码的注释,编译后也是不会显示在客户端的

jsp三大指令

一个jsp页面可以有0到多个指令,同时这些指令的位置没有要求说必须放在文档的开头
- 格式:
- <%@指令名 att1=”xxx” att2=”xxx”%>

  • ==page指令的属性==

    • pageEncoding和contentType
      • pageEncoding:他指定当前jsp的页面的编码, 在服务器时把jsp编译成Java文件时,就要使用pageEncoding
      • contentType:它表示添加一个响应头,content-Type等同于response.setContentType(“text/html;charset=utf-8”)
      • 如果两个值只提供一个,那么另一个的默认值就是设置的那一个
      • 如果两个属性都没有设置值,那么默认为iso
    • import:导包!可以出现多次
    • errorPage和isErrorPage

      • 这种方式跳转到错误页面,地址栏不会发横变化,那么也就是说是是转发到错误页面的 ,如果不给错误页面的page指令 设置一个属性isErrorPage为true,那么虽然跳转了,但是响应码是200
      • errorPage:当前页面如果发生异常,那么就使用这个舒心指定转发到哪个页面 ,==响应码是200==
      • isErrorPage;它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面的==状态码设置为500==,而且 可以使用内置对象exception,==注意只有指定了这个页面是错误页面才可以使用exception内置对象==
      • 也可以通过设置配置文件来定义如果出现异常要转发到哪个页面,例如;
            <error-page>
                <error-code>404</error-code>
                <location>/error/errorPage.jsp</location>
        
            </error-page>
            <error-page>
                <error-code>505</error-code>
                <location>/error/errorPage.jsp</location>
        
            </error-page>
            <error-page>
                <exception-Type>java.lang.RuntimeException</exception-type>
                <location>/index.jsp</location>
        
            </error-page>
        

      这里写图片描述

    • autoFlush和buffer
      • autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!默认是true,如果为false,那么在缓冲区满时抛出异常
      • buffer:指定缓冲区大小,默认是8kb,通常不需要修改
    • isElignored:是否忽略el表达式,默认false,不忽略,即支持
    • 不常用的属性
      • language:指定当前jsp编译后的语言类型,默认是Java
      • info:信息
      • isTreadSafe:当前的jsp是否支持并发访问
      • Session:当前页面是否支持Session,如果为false,那么当前页面就没有Session这个内置对象
  • ==include指令 静态 包含==

    • 格式:<%@include file=”“%>
    • include的作用是包含指定的页面,在jsp被编译成Java文件之前会吧两个jsp文件合并,然后再编译成一个Java,再编译成class文件 文件(也就是生成了一个Servlet)
    • ==注意==:但是request.getRequestDispatcher(“”).include(request,response)这中包含是在运行的时候包含(动态包含),是 两个Servlet,两个Java文件,两个class文件
    • <%@include file=”“%>file 属性内不可以写变量,因为include包含是在编译成Java文件之前,完成的,但是变量是在class文件行时才能明确的
    • 演示请求包含代码和结果 这里写图片描述
    • 便宜后的文件(服务器目录–work-catalina…)这里写图片描述
  • ==taglib指令 导入标签库==

    • <%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
    • taglib指令是用来导入标签 库的,
    • prefix 指定标签前缀名,这个名字可以自己定义
    • uri 指定第三方标签库的uri(唯一标识)
    • 引用之前,需要导入第三方标签库的jar包

PageContext

  • 一个顶9个
  • Servlet中有三大域,而jsp中有四大域,他就是最后一个域对象。
    • ServletContext;整个应用程序
    • Session:整个会话(一个会话中一个用户)
    • request:一个请求链
    • PageContext;==一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据==
      • 域对象,pageContext 本身也是域对象,也可以存取删属性这里写图片描述
      • 代理其他域对象,通过这个对象,可以直接 给其他三个域对象设置属性,也可以从其他 三个域对象获取属性
        • setAttribute(String key,Object vlue,int scope)
        • getAttribute(String key,int scope)
        • removeAttribute(String key,int scope)
        • 其中方法中的scope是PageContext类(Java ee文档)中的四个字段==PAGE_SCOPE , REQUEST_SCOPE , SESSION_SCOPE , APPLICATION_SCOPE==
        • 实例:通过代理设置属性,被代理的域对象获取属性 这里写图片描述
      • 全域查找:使用pageContext内置对象的findAttribute()方法,可以按照域对象从小到大的顺序查找属性这里写图片描述
      • 获取其他8个内置对象这里写图片描述

jsp动作标签

  • 这些jsp动作标签,与HTML提供的标签有本质的区别
  • 动作标签是由服务器来解释执行,它与Java代码一样,都是在服务器端执行的
  • html由浏览器来执行
  • :转发!它与request.getRequestDispatcher().forward(request,response)方法一样这里写图片描述
  • :转发!它与request.getRequestDispatcher().include(request,response)方法一样这里写图片描述
    • flush 属性,如果设置为true ,当包含的资源很大的时候,服务器会先响应给客户端一部分,然后再等待后续的内容,但是如果设置为false 的时候,服务器 会在资源加载完之后才响应给客户端,如果是大型的页面,同时带宽又不足,可以使用true
  • :它用来作为forward和 include的 子标签,用来给转发和包含的页面传递参数
与JavaBean相关的三个动作标签
  • –> 创建或查询bean
    • 在session域中查找名为user1的bean,如果不存在,创建之
    • 当创建之后,再次使用这个标签,那么就是 查询的效果了

    • 设置名为user1的这个javabean的username属性值为admin

    • 获取名为user1的javabean的名为username属性值

修改配置文件context.xml

  • 实现修改项目中的文件,不用重新启动服务器
  • 配置文件的位置:服务器目录–>conf–>context.xml
  • 格式:这里写图片描述

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值