JSP(一)

一、JSP概要

一】JSP的概念

1>JSP是SUN公司开发的一个基于服务端的一种动态WEB开发技术。
         2>JSP的代码结构/内容 = HTML内容+JSP特有元素内容
         3>在IDE工具中开发JSP,pageEncoding有两层含义:
             1》指明当前JSP中的字符采用什么方式编码
             2》指明当前JSP页面保存时采用什么方式编码
         4>如果再次访问同一个data.jsp文件,翻译工作依然进行,
             但Servlet引擎可以去掉创建Servlet对象的工作,得到优化,
             因此,这就是第二次比第一次访问迅速的原因。
  二】JSP的强项
         项目中,最佳实践模式:
             Servlet:适合控制器
             Jsp:适合显示
             JavaBean:模型
  三】JSP原理
     1)web容器根据客户端访问的资源类别(Web容器会根据资源的第一行代码确定),
             如果是JSP资源,就交给JSP引擎处理
             如果是Servlet资源,就交给Servlet引擎处理
     2)如果是JSP资源,JSP引擎会自动将其翻译成Servlet资源,
     3)传入相关的对象,如果是静态资源,翻译成以out.write()形式输出,
                                          如果是动态资源,翻译成以out.print()形式输出
     4)此时JSP引擎在翻译正确后,输出给Servlet引擎,按照Servlet对象的处理流程进行处理。
二、JSP语法
    一】JSP模版元素
                ------就是HTML中的静态内容,即<body>、<table>、<form>...等标签
    二】JSP脚本表达式
            作用:用于将程序数据输出到客户端
            语法:<%= 变量或表达式 %>
            注意:
                1》结尾无分号
                2》默认输出到客户端的浏览器
            eg:
                当前时间:<%= new java.util.Date() %>
    三】JSP脚本片断
            作用:用于在JSP页面中编写多好Java代码
            语法:
                <%
                    ...
                    java代码;
                    ...
                %>
                
                注意:
                    1》脚本片段中的注释符号与java代码一致(因为里面就是java代码)
                    2》JSP修改后,无需重新部署,直接刷新,Web容器会自动比较新旧两个版本的JSP
                    3》多个JSP脚本片断中定义的变量,都会翻译到_jspService()函数中,作为【局部变量】
                    4》如何再次访问同一个date.jsp文件,翻译工作依然进行,但Servlet引擎工作可以简化,这就是为什么第n次比第1次访问速度快的原因。
    四】JSP注释
        注意:
            1》JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。
            2》JSP注释不能进行嵌套使用。
        与HTML注释的区别:
            1》对于HTML注释来说,JSP引擎会将其翻译成Servlet内容,
            2》对于JSP注释来说,JSP引擎不会进行翻译。
                因此,为了减少服务器压力,优先使用JSP注释,
                其实,这也是为什么在客户端能显示HTML注释,而不显示JSP注释的原因。
            
        格式:
            <%-- 需要注释的内容 -->
    五】JSP声明(即翻译后将声明的东西放到Servlet对象中,作为属性或者作为方法)
        1)声明变量
        作用:创建一个实例变量,即翻译成的Servlet对象的全局变量(属性)。
        格式:
            <%!
                声明变量的代码;
            %>
        code:
            <%!
                String name="哈哈";
            %>
        2)声明方法
        作用:创建一个方法,即翻译成的Servlet对象的方法成员。
        格式:
            <%!
                方法代码块
            %>
        code:
        <%!
            public String getName(){
                return name;
            }
        %>
        
        
三、JSP指令
        一】含义
                1)指令是程序员控制JSP引擎做什么的依据
                2)主要有三种:page, include, taglib
        二】基本语法
            一个指令可以有多个属性值。
            <%@ 指令 属性名="值" 属性名="值"...%>
        
        三】page指令
                    
                1)属性:

                        language="JSP里面包含的动态语言,默认为java语言, 一般可以不写"   code:    language="java"
                        *import="当前JSP页面中,需要导入的包.【会翻译成java文件的import语句。】"   code:    import="java.util.*, java.io.*, ..."
                        session="true|false" 设置翻译成java文件时会不会自动创建session对象【创建的是全局对象】。默认值为true
                        buffer="none | 8kb | sizekb" JSP输出时使用的缓存大小,默认8kb
                        autoFlush="true| false" 设置当buffer缓存满时,web容器是否自动刷新到客户端。默认为true。
                                                                            如果为flase需要添加自动刷新的代码
                        isThreadSafe="true | false"    表示web服务器确保是否线程安全  默认为true
                                                                                true:容器自动帮加锁
                                                                                false:需要自己写代码加锁
                        info="text(JSP的信息)"        表示JSP的相关描述信息,【可以通过getServletInfo()获取该JSP的信息】
                        *errorPage="relative_url" 当前JSP出错后跳转到目标页面, 【底层使用的是转发】。
                        *isErrorPage="true | false" 默认为false。【当前页面是否是错误的页面错误后转向的处理页面】,
                                                                                当JSP页面有此属性且为ture时,服务器翻译时候容器会自动创建一个全局变量exception.
                                                                                因此,只有JSP页面有该属性且为true时,web容器才会自动创建exception对象
                                                                                才能调用getMessage()方法获取到关于错误的信息
                        *【contexType和pageEncoding已经可以通用了】
                        *contentType="text/html;charset=UTF-8"
                        *pageEncoding="UTF-8"
                        *isELIgnored    ="true | false"     在JSP引擎翻译时是否把EL表达式语言忽略掉

2)补充:
                    页面错误处理的方式:
                    优先级:
                        第一种方式【局部异常处理】>第二种方式【全局异常处理】
                        
                    1>第一种方式:通过page指令里面的errorPage属性和isErrorPage属性
                            属于【局部异常处理】,只对一个JSP页面起作用。
                            errorPage:出错的页面,指定处理页地址
                            isErrorPage:处理页面,指明处理错误的方式。
                            
                    2>第二种方式:修改web.xml文件
                            属于【全局异常处理】,对项目的所有JSP页面起作用。
                            加上一个<error-page>标签
                            格式:
                                <error-page>
                                    <exception-type>错误的类型,即异常类</exception-type>
                                    <error-code>错误状态码</error-code>
                                    <location>错误处理页面</location>
                                </error-page>
                            code:
                                <error-page>
                                    <exceptin-type>java.lang.NumberFormatException</exception-type>
                                    <error-code>500</error-code>
                                    <location>/error.jsp</location>
                                </error-page>
                                <error-page>
                                    <error-code>404</error-code>
                                    <location>/unkown.jsp</location>
                                </error-page>
                        
                        注意:
                            1》当使用此种方式。当异常即符合状态码和又符合异常类型,
                                    则会调用转发的include方法,将结果并行显示出来。
                                    结果中:先显示error-code的处理结果,再换行显示exception-type的结果。
                            2》开发中,优先考虑error-code。

3>第三种方式:在页面中使用try..catch的方式来处理。但是不建议使用此方式。
                
                
            3)page指定的应用-----使用page指令解决中文乱码问题
                注意:JSP页面在提交数据的时候,会自动将中文字符转换成%ad的形式
                原理:
                1>pageEncoding的含义:即告诉浏览器用什么方式去解析服务端响应的编码。
                        pageEncoding="utf-8"
                        1》JSP页面的中文采用UTF-8方式编码
                        2》JSP保存时采用UTF-8方式编码
                        3》指示浏览器以UTF-8方式解析内容
                2>request.setCharacterEncoding("UTF-8");//设置web容器以何种编码去解析客户端的数据。
                                                                                                //未设置则默认用ISO8859-1去解析客户端的数据
                
                
    四】include指令【静态包含】————(相当于把多个jsp文件合并成在一个jsp文件之中)
          作用:在一个页面中包含多个JSP文件,与转发的include()方法类似。
          格式:<%@ include file="relativeURL" %>
          注意:
              1)include指令包含多个JSP页面,最后JSP引擎只翻译总的JSP页面,即index.jsp页面。
              2)被包含的JSP页面会原封不动的导入到总的JSP页面中,造成HTML结构非常混乱,有多个HTML等标签。。。
              3)多个JSP最终会整合并翻译成一个Servlet,即index_jsp.java文件。
    五】taglib指令(略)
    
四、JSP九大内置对象
    1)request <---> HttpServletRequest
    2)response <--->HttpServletResponse
    3)session <---> HttpSession
        1》访问JSP页面时,默认web服务器创建session
        2》访问servlet时,必须通过request.getSession()才能创建session
        3》在转发和重定向情况下,session不会销毁.原因:服务器和客户端并没有断开连接,重定向其实是再一次的请求。    
    4)application <---> ServletContext
        code:
        <%
            application.setAttribute("name", "jack");
          application.removeAttribute("name");
          String name = (String)application.getAttribute("name");
          response.getWriter().write("用户名:" + name);
      %>
  5)config  <---> ServletConfig
      取得JSP在web.xml文件中的映射信息
  6)exception:该对象只能在含有<%@ page isErrorpage="true" %>的页面中容器才会创建,并可调用getMessage()等方法进行处理。
  7)out:是一个JspWriter对象。即一个带有缓冲功能的printWriter对象.
      即:【out】 <===>【response.getWriter()+缓冲】
      code:
          out.writer("先");
          response.getWriter().writer("后");
       //结果:  后 先
      
      原因:【JspWriter与printWriter的区别】
          JspWriter先将数据缓冲在自己的缓冲池,再输入到web容器的公用缓冲池;
          而printWriter直接将数据缓冲到web容器的公用缓冲池中。
  8)PageContext对象
                  ------表示JSP运行过程中的环境对象
      1》可以通过其方法取得其它的8个隐藏内置对象;
      2》具有转发和包含的功能, 但没有重定向的功能!
      3》其本身也是一个域对象
      重点方法:
          1》获得其它8大内置对象:
              【对象名】        get【对象名】()
              
    总结:
        JSP中的四大域对象:【pageContext,request,session,application】
        Servlet三大域对象: 【HttpServletRequest, HttpSession, HttpServletContext】

时间: 2024-10-13 10:38:38

JSP(一)的相关文章

不用动手术的肝脏清洗法

几乎每个人体内都有肝胆结石,或许很多人只知道胆结石,不知道肝脏内也有结石,也不知道其实很多胆结石的初期就是在肝脏内形成的,更不知道吃夜宵.晚饭在7点之后吃.吃油炸食品.甚至喝水较少也会导致肝胆结石.就以上几个不良生活习惯,我们每个人占多少?简单的讲,肝脏是人体内最大的器官,它是人体的解毒工厂,它的构造极其复杂,所以至今为止,人类无法设计出人造肝脏,它的复杂度仅次于脑组织.所以让肝脏维持正常功能直接关系着人体的健康.肝脏可以使激素,酒精以及某些有害药物在体内失效.各种人体无法代谢的毒素都会由肝脏负

导演与明星老婆离婚 恋亲手捧红干女儿

http://www.ehotelier.cn/Thread.jsp?tid=182934http://www.ehotelier.cn/Thread.jsp?tid=182940http://www.ehotelier.cn/Thread.jsp?tid=182946http://www.ehotelier.cn/Thread.jsp?tid=182951http://www.ehotelier.cn/Thread.jsp?tid=182957http://www.ehotelier.cn/T

jsp获取当前项目跟路径

在jsp中获取当前项目的根路径: <% String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%> 可以使用${basePath}获取.

Jsp通过Filter实现UrlRewriter原理

web.xml文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q

jsp声明周期

https://www.w3cschool.cn/jsp/jsp-life-cycle.html 几点注意: jsp初始化期: 容器载入jsp文件后,它会在为请求提供任何服务前调用jspinit()方法.如果需要执行自定义的jsp初始化任务,就重写jspinit()方法就行了. public void jspInit() { //代码 } 一般来讲程序只初始化一次,servlet也是一样的.通常情况下您可以在jspInit()方法中初始化数据库连接打开文件和创建查询表. jsp执行期: jspS

JSP、JSTL、EF学习笔记

JSP 1)Java Server Page,在html中嵌入java代码 2)九个内置(隐式)对象 request response out page pageContext config session application Exception 3)JSP指令 <%@ page ... %> Page指令,定义页面属性 eg:<%@ page language="java" contentType="text/html;charset=UTF-8&qu

【JSP】配置错误页面

1,使用JSP方式 如果配置是Jsp时,需要把isErrorPage设置为true, 以及设置 <%@ page language="Java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" isErrorPage="true"%> 错误页面: <%@page import="java.io.PrintStream"

jsp映射为其他地址上去 ???

在web.xml 里面配置servlet不起作用,所以配置jsp,然后在jsp里面跳转到servlet去   ???  第八天中的<08-jsp常用标签.avi> 在web.xml里面先设定 14.jsp 为默认首页,然后在14.jsp 里面设定跳转到servlet 代码里面去 映射到其他地址去:

关于tomcat JSP虚拟目录的这点事儿!

最简单的情况当然是将.jsp文件放在C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT目录下,运行tomcat, 在浏览器中直接访问http://localhost:8080/HelloWorld.jsp  即可运行.jsp文件 而在实际的开发运用中,我们是不可能将Tomcat应用程序安装在系统盘如C盘. 所以,我们需要运用到设置虚拟目录的知识: 为创建虚拟目录以在浏览器中运行jsp文件:1:假设我们将tomca

jsp&amp;el&amp;jstl-01

案例1-在页面中展示所有商品信息,不要使用jsp的脚本技术分析: jsp/el/jstl jsp: java 服务器页面 作用: 将内容的生成和信息的展示相分离 运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下.jsp脚本: <%..%> java代码片段 <%=..%> 输出表达式 相当于out.print(); <%!...%> 声明成员jsp的指令 作用:声明jsp页面的一些属性和动作 格式: <