Jsp学习总结(二)

Jsp脚本中的9大内置对象(都是_jspService()方法中的形参,或者是局部变量):
    application:对应javax.servlet.ServletContext实例,代表jsp所属的web应用本身,用于jsp页面或者Servlet之间交换信息
    
    config:对应javax.servlet.ServletConfig实例,代表Jsp的配置信息,(这玩意基本用不到)
    
    exception:对应java.lang.Throwable实例,代表其他页面的错误信息和异常,只有page编译指令中的isErrorPage为true时
               该对象才能用
    
    out:对应javax.servlet.jsp.JspWriter实例,代表jsp页面的输出流,用于输出页面内容,形成HTML页面
    
    page:代表该页面本身,没有什么鸡用(主要就是Servlet中的this)
    
    pageContext:对应javax.servlet.jsp.PageContext实例,代表jsp页面上下文,可以访问页面中的共享内容
    
    request:对应javax.servlet.http.HttpServletRequest实例,该对象封装了一次请求,客户端的请求参数都被封装到这里
             这玩意太重要了,一般获取客户端的请求参数都必须使用该对象
    
    response:对应javax.servlet.http.HttpServletResponse实例,代表服务器对客户端的响应,一般很少使用这个来输出响应
              内容,输出内容还是out比较好,这个对象一般都用在重定向

    session:对应javax.servlet.http.HttpSession实例,代表一次对话。当客户端浏览器与服务器连接时,会话开始
             当客户端关闭浏览器的时候,会话结束。

application对象(代表Web应用本身):
    在整个Web应用的多个jsp,Servlet之间共享数据
    访问Web应用的配置参数
        在web.xml使用context-param配置参数(他有两个子元素)
            param-name:配置Web参数名
            param-value:配置Web参数值

config对象:
    代表当前jsp配置信息
        主要方法:getServletName() 返回的都是jsp

exception对象:
    代表jsp标本中产生的错误和异常,是jsp页面异常的一部分。
    当然page编译指令中isErrorPage要为true

pageContext对象:
    代表页面的上下文,主要访问的jsp之间的共享数据。就是可以访问那四个范围内的变量

    getAttribute(String name):获取page范围内的name属性
    getAttribute(String name,int scope):获取指定范围内的name属性值
        PageContext.PAGE_SCOPE:对应page范围
        PageContext.REQUEST_SCOPE:对应request范围
        PageContext.SESSION_SCOPE:对应session范围
        PageContext.APPLICATION_SCOPE:对应application范围

    当然这些范围对setAttribute()方法同样适用。

    4个生存范围对应的整型变量:
        1:对应page生存范围
        2:对应request生存范围
        3:对应session生存范围
        4:对应application生存范围

request对象(重点):
    获取请求参数的重要途径。可代表本次请求范围,还可用于操作request范围的属性

    客户端发送请求参数的两种情况:
        GET方式的请求:也是默认form请求,一般来说创书的数据量较小,而且对于一些重要信息来说,安全性不是很高
        POST方式的请求:大多说用于提交表单,数据传送量比较大,安全性比较高,信息都被封装起来了。

    获取请求头信息:
        Enumeration<String> headerNames = request.getHeaderNames();
        
        while(headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            //获取每个请求的值
            out.println(headerName + "-->" + request.getHeader(headerName) + "<br/>");
        }

    操作request范围的属性:
        setAttribute(String attName,Object attValue):attValue设置为request的范围
        Object getAttribute(String attName):获取request范围的属性

    执行forward和include:
        request.getRequestDispatcher(String path),path就是希望forward和include的目标路径
            该对象提供两种方法:
                forward(request,response);执行forward
                include(request,response);执行include
            如:
                request.getRequestDispatcher("/a.jsp").include(request,response);
                request.getRequestDispatcher("/a.jsp").forward(request,response);
            注意:
                使用request的getRequestDispatcher(String path)方法时,该path字符串必须以斜线开头

response对象:
    代表客户端的响应,一般都是输出一些比较猥琐的内容,比如位图,PDF文档等,还可以使用response来重定向,以及向客户端增加Cookie

    作用:
        1、response响应生成非字符响应(getOutputStream()该方法返回响应输出字节流)
        2、重定向
            与forward不同的是,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,与前一次的请求不在同一个request范围内,左移发送一次的请求参数和request范围内的属性全部丢失。
            重定向会丢失所有的请求参数,使用重定向动作时,地址栏URL会变成重定向目标的URL

            语法:response.senRedirect("path");

        注意:
            重定向会丢失所有的请求参数,使用重定向的效果,与在地址栏里重新输入新地址在按回车的效果是一样的,即发送了第二次请求。

forwrad(转发)和redirect(重定向)对比:
    1、前者执行之后还是上一次请求,后者生成了第二次请求。
    2、前者的目标页面可以访问原请求的请求参数,因为依然是一次请求,请求参数和request的范围内的属性全部都在。后者不能访问原来的请求参    
      数,因为这是第二次请求,原请求的请求参数和request范围内的属性全部丢失
    3、前者请求的URL不会改变,后者变为重定向的目标URL,就是URl会改变。

Cookie和Session强行分析:
        Cookie用于网站记录客户的某些信息,下一次登录就可以获取客户的相关信息
        
        Cookie和session的不同在于:
                前者会跟随浏览器的关闭而失效,后者会一直存放在客户端机器上,除非超过了Cookie生命期限,或者你手动的清除Cookie记录

        增加Cookie也是使用response内置对象完成(void addCookie(Cookie cookie)来增加Cookie)
        步骤如下:
            创建Cookie实例对象,Cookie的构造器Cookie(String name,String value)
            设置Cookie的生命期限,就是该Cookie在多长时间内有效
            向客户端写Cookie

        注意:
            使用Cookie对象必须设置他的生命期限,否则Cookie将会跟随浏览器的关闭而自动关闭。
            如果需要Cookie为中文,就要借助java.net.URLEncoder先对中文字符串进项编码。

Session对象:
        代表一次用户会话(从浏览器连接服务器开始,到浏览器和服务器断开为之,这是一次会话)
        通常用于跟踪用户的会话信息,如判断用户是否登录,购物车跟踪用户购买商品等
    
    session对象是HttpSession的实例,下面是两个常用的方法:
        setAttribute(string)

    注意:
        session机制通常用于保存客户端的状态信息,这些信息需要保存在web服务器的硬盘上,所以要求session里的属性值
        是可序列化的,否则将会引起不可序列化的异常。而且通常只把用户会话相关的信息放在session范围内,不要仅仅为了连个页面交换信息
        随意的把信息放在信息内。这样不好,这样有瑕疵,这样很铁头娃。

没错,我就是铁头娃。

时间: 2024-10-12 13:16:16

Jsp学习总结(二)的相关文章

JSP学习笔记(二):Tomcat服务器的安装及配置

一.Tomcat的下载及安装. 前往Tomcat官网下载安装包或者免安装压缩包.链接http://tomcat.apache.org/ 这里,我选择的是Tomcat8.0,而不是最新的Tomcat9.0,这是因为Eclipse现在支持的最新的是8.0. 选择下载的是安装文件,下载后为,点击安装. 安装时可以配置HTTP访问的端口,默认的是8080(localhost:8080),在下图这个界面时是可以进行配置的,也可以在安装完后通过配置文件server.xml进行修改. 进行JRE的路径设置,如

JSP学习笔记二:JSP语法之脚本语法

1.脚本段:<%  ...  %> 2.表达式:<%= .. %> 下面,我们举个例子说明一下. JSP代码如下: <% int a = 10; %> <%=a%> 相应的转译文件,对应如下代码: int a = 10; out.print(a); 可以看出,表达式对应的是输出语句.所以,写成<%=a;%>就相当于out.print(a;);的话,就会报错. 3.声明:<%! ... %> 我们在JSP代码中写下如下语句: <%

JSP学习日记(二)

JSP 指令 (JSP Directive) page指令 include指令 taglib指令 语法:<%@ 指令名称  属性值  属性值 --- %> page指令用来定义JSP文件的全局属性<%page 属性="值" %> include指令,用来静态包含页面----------将页面公共部分提取出来,通过include完成页面布局 语法:<%@ include file="文件路径" %> include包含目标页面整个内

JSP 学习二

在基于昨天对JSP学习的基础上,今天我们来学习JSP的指令和JSP 对中文的处理. 一.JSP指令简介 JSP 指令是为JSP引擎而设计,它并不直接产生任何可见的输出,而只是告诉引擎如何处理JSP页面中其余的部分. JSP的指令共定义了三个指令: page指令 include指令 taglib指令 JSP指令的基本语法格式:<% @ 指令 属性名=“值” %> 例如: <% @ page contentType="text/html";charset="gb

Tomcat学习之二:tomcat安装、配置及目录文件说明

我们看到tomcat目录/bin文件夹里有个tomcat6w.exe,顾名思义就是tomcat以window方式显示控制台.第1次点击打开它时候,可能会提示:tomcat指定的服务未安装,此时我们可以这样解决它. 打开命令行提示符窗口-> 进入Tomcat安装目录-> 进入bin目录下-> 输入:service.bat install 即可,如图操作,tomcat目录按自己电脑上的来即可 <!--[endif]--> 这样就可以让tomcat以window方式显示控制台.点击

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

Cookie学习笔记二:Cookie实例

今天说说刚刚学到的两个Cookie的最经典应用:自动登录和购物车设置 一:自动登录 需要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp处理登录信息:如果有Cookie,则自动登录,否则创建输入信息的对象的Cookie,下次登录可以直接登录,但是我们在这里给Cookie设置一个最大保存时间30s,即登录30s后会自动退回到登陆页面,具体代码如下: login.jsp: <%@ page language="java" con

Spring Boot学习记录(二)--thymeleaf模板

Spring Boot学习记录(二)–thymeleaf模板 标签(空格分隔): spring-boot 自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好的和spring集成.下面开始学习. 1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</gr