JavaWeb基础篇(五)--JSP基础

一、脚本Scriptlet:

1.     <%

       局部变量,Java语句

  %>

2.    <%

             全局变量,定义方法

        %>

3.    <%=输出表达式 %>

4.注意:

一般而言,修改xml,配置文件,java  必须要重启Tomcat。修改JSP,HTML,CSS,JS不需要重启

 5.注释

(1)HTML注释 

(2)Java注释    //  /*  */

(3)JSP注释      <%-- 被注释内容 --%>

二、JSP三大指令

1.page指令:定义网页以来属性,比如脚本语言,error页面,缓存需求等。

       <%@page ... %>

       指定的属性:

       *language:JSP页面使用的脚本语言

       *import:导入类

       *pageEncoding:JSP文件自身编码,JSP->Java用的编码

       *contentType:浏览器解析时所用的编码

 *errorPage:  指定错误的处理页面。

 *session:默认是true,说明可以直接使用session

 *buffer:设置输出缓冲区的默认大小是 8 kb

 *autoflush:如果缓冲区满了,是否自动刷新

 *extends :继承,(一个JSP的文件翻译,Java的文件,默认继承一个类)

 *isELIgnored:是否忽略EL表达式,默认是false,表示不忽略,在页面上直接使用。

<%@ page contentType="text/html;charset=UTF-8" language="java" 
  charset="utf-8" pageEncoding="utf-8" import="java.util.Date" %> 

2.include指令:包含其他文件

       <%@include ... %>

**原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一个java源文件,再编译运行,这种包含     叫静态包含(源码包含)

**如果使用静态包含,被包含页面中不需要出现全局的html标签了!(如html、head、 body)。原因是各个页面在翻译之前是把所       有内容复制过去一起翻译成一个Java文件,再进行编译。全局标签会有赘余。

3.taglib 指令:引入标签库的定义

       <%@taglib ... %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

三、JSP九大内置对象(自带的,不需要new也能使用的对象)

 1.application  

 **javax.servlet.ServletContext 的实例,代表JSP所属的web应用本身,可用于页面之间交换信息

常用方法:

String getContextPath()  获得虚拟路径

String getRealPath(String name);     获得虚拟路径对应的绝对路径

 2.config 

**javax.servlet.ServletConfig 的实例,代表JSP的配置信息

常用方法:

 getInitParameter(String paramName) 

 getInitParameternames() 

3.exception     

**java.lang.Throwable 的实例,代表其他页面中的异常和错误,只用当页面时错误处理页面,即page的isErrorPage=true 时,该对象才      可以使用。

常用方法:

getMessage()

printStackTrace() 

4.out     

**javax.servlet.jsp.JspWriter 的实例,该实例代表jsp的页面输出流,用于输出内容

5.page    代表页面本身,也就是servlet中的this,一般不用 

6.pageContext      

**javax.servlet.jsp.PageContext的实例,该对象代表该jsp的上下文,使用该对象可以访问页面中的共享数据

常用方法:

getServletContext(); 

getServletConfig();

7.request      

**javax.servlet.http.HttpServletRequest 的实例,封装了一次请求。

常见方法:

String getParameter(String name):根据字段名key返回字段值value

String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value(checkbox)

void setCharacterEncoding("utf-8"):请求设置编码

getRequestDispatcher(“b.jsp”).forward(requset,response):请求转发

8.response     

**javax.servlet.http.HttpServletResponse的实例,封装了一次响应。

常用方法:

void addCookie(Cookie cookie): 服务端向客户端增加cookie对象

void sendRedirrect(String location) throws IOException : 页面跳转的一种方式。

void setContetType(String type): 设置服务端响应的编码

9.session(服务端)        

**javax.servlet.http.HttpSession 的实例,代表一次会话

10.注意:

请求转发和重定向的区别:

*请求转发地址栏不改变,重定向改变

*请求转发会保留第一次请求时的数据,重定向数据丢失。

*请求转发请求一次,重定向请求两次

*请求转发在服务端发生跳转,重定向在客户端发出第二次跳转时跳转

 

 四、四种范围对象(小->大)

1.四种范围对象分别是:

pageContext   JSP页面对象 (page对象)

       -只在当前页面有效

request   请求对象

       -同一次请求有效,其他请求无效 (请求转发后有效,重定向后无效)

session   会话对象

       -同一次会话有效,(无论怎么跳转都有效,关闭/切换 浏览器后失效)

application  全局对象

       -整个项目期间均有效,切换浏览器依然有效,关闭服务或者切换项目无效。如果多个项目共享,重启时依然有效。

2.以上4个对象共有的方法:

(1)Object getAttribute(String name)    根据属性名,或者属性值

(2)void setAttribute(String name,Object obj);    设置属性值(新增,修改)

  eg:  setAttribute("a","b");   //如果a对象之前不存在,则新建一个a对象,如果已经存在,则将a的值改为 b

(3)void removeAttribute(Strin g name);   根据属性名,删除对象

3.注意:以上四个对象尽量选择范围小的。

五、JSP七大动作标签

1.        转发的功能

       page属性:转发到哪个页面上去。

       路径:服务器的绝对地址,不包含项目名称。

2.          转发的饿时候可以传递参数

       在转发时使用属性,放在标签内部

3,         动态包含(和静态包含效果一样,但是原理不一样)

       是每个JSP文件各自编译执行,最后效果呈现在一起。

4.        创建一个JavaBean的实例。

5.    输出JavaBean实例的属性值

6.    设置JavaBean实例的属性值。

7.            用于下载JavaBean或Applet到客户端执行。

JavaBean后面再继续介绍

关于三大指令,七大动作的博文推荐

https://blog.csdn.net/huanyuminhao/article/details/52048947

六、Cookie  Session

1.Session(服务端),是内置对象。

(1)session是一次会话。

(2)session机制:

客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息);并且每一个session对象都会有一个唯一的sessionID (用于区分其他的session)。服务端又会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionID值;然后服务端会在响应客户端的同时,将该cookie发送给客户端。至此,客户端就有了一个cookie(JSESSIONID);因此,客户端的cookie就可以和服务端的session一一对应。

如果不是第一次请求,就可以直接根据JSESSION去服务端中的session中匹配,如果匹配成功,就说明此用户不是第一次访问。

(3)session机制总结

-session 储存在服务端

-session 是在同一个用户(客户端)请求时共享

-实现机制:第一次客户请求时,产生一个sessionID 并复制给cookie的jsessionid,然后发给客户端。

(4)session方法:

String getId();  获取sessionId

boolean isNew();   判断是否是新用户(第一次访问)

void invalidate();    使session失效(退出登录。注销)


setAttribute();

getAttribute();


void setMaxInactiveInterval(秒);  设置最大有效非活动时间

int get MaxInactiveInterval(秒);   获取最大有效时间 

(5)session 失效

session.invalidate();

失效只会使当前session失效

2.Cookie

(1)简介:Cookie(客户端,不是内置对象);Cookie由服务端产生,再发给客户端保存,相当于本地缓存的作用。

(2)作用:提高访问服务端的效率,但是安全性较差。

(3)cookie方法:(Cookie: name=value)

public Cookie(String name,String value)

String getName()

String getValue()

void setMaxAge(int expeiy)   最大有效期(秒)

(4)服务端准备Cookie:

response.addCookie(Cookie cookie);

(5)客户端获取Cookie:

request.getCookie();

(6)注意:

服务端增加Cookie:response对象;客户端获取对象:request对象

不能直接获取某一个单独对象,只能一次性将全部的Cookie拿到

3.cookie 和 session的区别:

(1)cookie客户端      session服务端

(2)cookie较不安全    session较安全

(3)cookie保留String  session保留Object

4.客户端在第一次请求服务端的时候,如果服务端发现,此请求没有JSESSION,则会创建一个 name=JSESSION的cookie,并返给客户端

 七、附录

之前有一篇详细的介绍cookie和session的文章,链接--http://zhouchenming.top/c/session%E4%B8%8Ecookie%E7%9A%84%E5%8C%BA%E5%88%AB.html

猜你喜欢

转载自blog.csdn.net/weixin_43815050/article/details/87002549