JSP笔记

两类元素

(1)指令元素

<%@page%>: page指令指明JSP容器的沟通方式

language="java"         语言
importe="importList"        导入所需的包文件
contentType="contentType" 输出容使用的编码格式,告诉浏览器怎么解析  countentType="text/html;charset=UTF-8"
pageEncoding="utf-8"        jsp翻译成servlet使用的编码
session="true/false"        设置是否可以直接使用session
inThreadSafe="true/false"   是否线程安全
info="infoText"         jsp页面的相关信息
errorPage="errorPageUrl"    指定错误页面。。。。如果发生错误就会跳转到该页面
isErrorPage="true/flase"    指定当前页面为错误页面
autoflush="true/flase"      自动刷出缓冲区的内容,默认为true

*只有import属性可以重复使用


<%@inclued%>: 在JSP文件被转成Servlet之前将指定的文件包含进来

file="FileUrl"

*include只能是静态包含只能包含静态的资源,编译后生成的文件其实就是两个合起来生成的.Java文件最后编译成.class文件


<%@taglib%>

用于导入标签库
url="标签库名称" prefix="标签库的前缀"

(2)脚本元素

<%! %>声明 定义类 变量 方法 成员变量
<%= %>输出语句,尾部不能加分号
<% %>Java语句这个JSP语句中定义的变量为局部变量

六个动作(jsp动作)

本服务器,在用户请求时包含文件。包含文件个被包含文件各自编译,当用户请求页面时,才动态地包含其他文件

(和include指令的比较,指令执行速度相对较快,灵活性较差。动作执行速度相对较慢,灵活性较高。使用时若为静态页面则使用指令,若为动态则用动作)

配合include标签使用;给其他页面传递参数,参数为张三,键为name;

服务器的跳转,转发带请求的数据Url不变

javaBean:Java中的内省技术

创建一个Bean实例并制定他的名字和作用范围

要求:a.只一个公有类,b.具有一个公有的不带参数的构造方法c.类进行封装

设置Bean属性值(推荐使用插入java代码块实现)

获取Bean属性值(推荐使用插入java代码块实现)

会话技术:

会话的概念: 打开浏览器,可以访问web资源,多次访问web资源,关闭浏览器,整个过程称为会话
购买商品:用户点击超链接可以通过Servlet购买商品,程序应该保存用户购买的商品,以便于最后进行结算

Cookie(客户端)

setComment();设置注释
setPath();设置有效路径(***)
setDoMail();设置有效域名
setValue();设置cookie的值
setMaxAge(int expiry);  (*****)
expiry:
        默认有效期为当前会话结束时Cookie消亡
            正数:从当前时间到           正数秒
            0:  删除Cookie

Cookie存储中文时报错问题:

在Cookie中是不能直接存储中文的,我们要把中文进行编码才可以存储在Cookie中进行传输,要获取Cookie中编码的中文数据要进行解码操作.

解决方案:

    编码:URLEncoder.encode("中文", "UTF-8");
    解码:URLDecoder.decode("%E63%E56%E645+","UTF-8")

Session(服务器)

cookie基于客户端,不安全,大小和个数有限制

session 域对象 基于服务端的会话技术技术

session的原理:

    request.getSession();

服务端通过客户端携带过来的JSESSIONID判断是否在服务器是否存在这个JSEESIONID所对应的session,如果存在直接拿来使用,如果不存在则创建session

session的常用方法

setMaxInactiveInterval(int interval);设置session的有效期
                
    interval:  正数           从当前时间到          正数秒
                
    负数 或0:永不过期
                
session.invalidate():删除session
session.getId();            获取sessionid

持久化Session(了解)

通过session的原理,对jsessionid进行操作达到持久化seesion的目的

HttpSession session = req.getSession();
session.setMaxInactiveInterval(60*60*24*365);
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60*24*365);
resp.addCookie(cookie);

九个对象(jsp内置对象)

对象 | 真实对象 | 方法
request (客户请求的所有请求) | HttpServletRequest | setAttribute() getAttribute();
response(服务器对客户端的相应) | HttpServletResponse | addCookie(); getWriter();
session (代表一次用户对话,从客户端连接开始到结束) | HttpSesssion | setAttribute() getAttribute();
application(解决jsp和servlet交互问题) | ServletContext | setAttribute() getAttribute();
config (代表当前jsp配置信息) | ServletConfig | getInitParameter(); getInitParameterNames();

exeception (异常有关) | Throwable | getMessage();
page 该页面本身 | Object | 一般不使用
out (输出对象) | JspWriter | write() print() clear(),清空缓存区,不发数据到客户端
out.clearBuffer();将数据发送到客户端在清空缓存区;
(在返回response对象时会关)
out.close();关闭输出流(在返回response对象时会关)
pageContext (页面上下文,jsp间共享数据) | PageContext | setAttribute() getAttribute();

pageContext:域对象

范围:当前页面

自己存取值

setAttribute(name,value,scope);
setAttribute(name,value);无范围默认为page   这个范围指的并不是域范围

向其他域存值

pageContext.getRequest();
pageContext.getSession();
pageContext.getServletContext()

WEB服务器提供四个域对象(jsp域对象)

page

ServletContext

application web应用被加载时创建,服务器关闭时销毁

作用:

a.在不同servlet中转发this.getServletContext().getRequestDispatcher("url").forward(request,response);

b.读取资源数据

HttpServletRequest

request service方法调用前由服务器创建,请求结束销毁

作用:在整个请求链中共享数据

HttpSession

session 第一次调用request.setsession开始,会话结束销毁

作用: 保存会话相关内容

PageContext

page jsp请求时开始,当响应结束后销毁

作用:

a.获取其他八大隐式对象

b.获取其他隐式对象中的数据

c.跳转到其他资源,其身上提供了forWord和include方法,简化重定向和转发

EL表达式

${el表达式}

*el获取对象的属性:
            <% 
                User user = new User();
                user.setPassword("123@123");
                request.setAttribute("user", user);
            %>
        ${user['password'] }
        ${user.password}

*使用[]操作符必须给属性加上双引号

*在el表达式前,必须将对象存储到域对象中

*使用el访问作用域:
        jsp提供了四种作用域:
                pageSocpe
                requestScope
                sessionScope
                applicationScope
                
*el中的运算符
    <%
        int n1=5;
        int n2=8;
    %>

    request.setAttribute("n1",n1);
    request.setAttribute("n2",n2);


*加法运算

        ${n1 + n2}   13
        
*关系运算       
    
        ${n1 > n2}     ${n1  gt   n2}      false
        
        ${n1  <   n2}    $(n1   lt   n2)    true
            
        $(n1  == n2)   $(n1   eq  n2)    false
        
        $(n1  != n2)   $(n1   ne  n2)    true
        
        $(n1  >= n2)   $(n1   ge  n2)    false
        
        ${n1  <=   n2}    $(n1   le   n2)    true
        
*逻辑运算

            与:  &&
            ${n1>n2&& n1

*EL的内置对象:

    pageScope
    requestScope
    sessionScope
    applicationScope
    
    
    param: 获取请求参数
    paramValues:获取名称相同的请求参数的值
    header:     获取请求头信息header["cookie"]     
    headerValues
    initParam:初始全局化参数    
    pageContext:可以获取其他域对象
    
    ${pageContext.request.contextPath}:获取上下文路径   /项目名(Web-Context-Root)

jstl:(JSP Standard Tag Library)

    *jsp标准标签库
    *作用:与EL结合取代jsp中的<%%>
    *版本  1.0(没有被纳入标准)       1.1 1.2区别不大
    *下载jar包
            standard.jar
            jstl.jar
    *jsp页面引入标签库
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>        
        

        *
    value:输出的内容   变量   常量               
    default:如果值不存在显示的默认值    
    escapeXml:默认为true  对特殊字符进行转义,false则对特殊字符不转义
    
    
    *
            
            
                    var:变量的名称    
                    value:值
                    socpe:默认为page   可取的值有   page   request  session  aoolication
                    
                    
                    
                给域对象中的对象的属性赋值:

                    target:域对象
                    property:属性名称
                    value:属性值
                    
    


    *
    
            
        

    *              
                        <% 
                                int c= 10/10;
                        %>
                        
                        ${e.message}

    *
    
                
                    age>10
                 
            
                *test:条件
                *var :计算的结果保存到变量
                *scope:范围
                
                
                
    *        



                            
                                
                                        年龄大于10
                                
                        
                                
                                            10<年龄<20  > < & " ' 
                                
                                
                                年龄大于100                     
                            
                
                
    *        
    
                
                            ${str}
                
                                    
                
                *var:每次遍历出来的数据
                *items:需要遍历的内容
                ${status.index} 循环的序号
                
                
                *begin:开始位置
                *end  :结束位置
                *step:步长
                
                
    *    
                    
                            
                    
                        ${i}
                

                
                获取参数:
                        ${param.username}
    
    
    *
    
                        主要用于构建一个url地址
                        
                        
                            
                                    
                            

                            ${uu }         /day29/aa/bb.jsp?username=123    
                        
    *
            
    
    
    
    *    分割字符串(了解)

    
    *格式化日期
    
        引入标签库:
                    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
            
            
                        <%
                                Date date = new Date();
                                request.setAttribute("date", date);
                        %>
                  

你可能感兴趣的:(JSP笔记)