JSP

1.JSP页面元素

a.脚本Scriptlet

[注] 都是在body里面写
i.

<%
局部变量、java语句
%>

ii.

<%!
全局变量、定义方法
%>

iii.

<%=输出表达式%>

eg:

       <%!
public String bookNake;
public void init(){
bookName="java书";
}
%>

====hello index1 你好...====
<%
String name="zhangsan";
out.print("hello..."+name);
init();
%>

<%="hello..."+bookName %>

一般而言,如果修改web.xml、配置文件、java文件需要重启tomcat服务器
但是如果修改jsp、html、css、js不需要重启

b.指令

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

page指令: <%@ …. %>
page指定的属性:
  language:jsp页面使用的脚本语言
  import:导入类(比如后面的代码要用Date类,就要在这个地方impor)
  pageEncoding:jsp文件自身编码(jsp->java)
  contentType:浏览器解析jsp的编码(与上面要保持一致)

c.注释
<!--html注释-->   可以通过浏览器查看源码观察到,但是下面两个不行
java注释 // /**/
<%--jsp注释--%>

2.JSP内置对象(九个)

自带的,不用new也能使用

  1. out:想客户端输出内容
  2. pageContext
  3. request:请求对象,存储”客户端向服务端发送的请求信息”

    request常用方法:
     String getParameter(String name)根据字段名key(input标签的name属性值),取字段值value(input标签的value属性值)
     String[] getParameterValues(String name)返回的是一个数组,如果爱好里面有足球、篮球等
     getRequestDispatcher(“b.jsp”).forward(request,response)请求转发,A页面跳到B页面
     request只在同一次请求有效,如果按浏览器上的刷新键,则相当于再提交请求一次,跟之前的请求不一样了,第二次在check.jsp里面可能会报错是因为第二次没有第一次的输入,没有name pwd的数据了。但是firefox浏览器按F5表示的是重复之前的操作(即输入用户名,密码,不会报错)
     get提交方式:method=”get”和地址栏、超链接(<a href="xx">)请求方式 这些默认都是get提交方式
    get与post请求方式的区别:
     get方式在地址栏显示请求信息(姓名性别那些,但是地址栏能够容纳的信息有限,图片等可能都容纳不下),post不显示
     文件上传操作,必须是post,也推荐使用post
    统一请求方式的编码(出现乱码的解决方案)
     get方式请求的乱码:修改server.xml中在端口号的那一行最后加上URIEncoding=”UTF-8”
     post方式请求的乱码:body标签里面写request.setCharacterEncoding(“utf-8”)

  4. response:响应对象

    提供的方法:
    void addCookie(Cookie cookie):服务端向客户端增加cookie对象
    void sendRedirect(String location) throws IOException 页面跳转的一种方式(重定向,还有一种是请求转发)
    void setContentType(String type)设置服务端响应的编码(设置服务端的contentType类型)

请求转发重定向
地址栏是否改变不变(check.jsp)改变(success.jsp)
是否丢失第一次请求时的数据不丢失丢失
请求的次数1次2次
跳转发生的位置服务端服务端返回后,客户端发生第二次跳转
  1. Cookie(客户端,不是内置对象,所以需要new。但是服务端会自动new一个name=JESSIONID的cookie):由服务端生成的,再发送给客户端保存

     相当于本地缓存的作用:如第一次先把服务端的内容下载下来保存到本地,之后看便可以直接在本地。
     客户端第一次请求服务端时,如果服务端发现此请求没有JESSIONID,则会创建一个name=JESSIONID的cookie,并返回给客户端。
     作用:提高访问服务端的效率,但是安全性较差。
    Cookie:key=value(一个Cookie包含一个键值对)
    在java.servlet.http.Cookie里面
    public Cookie(String name,String value)
    void setMaxAge(int expiry) 最大有效期(秒)
    服务端准备Cookie:
     response.addCookie(Cookie cookie)
    页面跳转
    客户端获取cookie:
     resquest.getCookies()
    a.服务端增加cookie:response对象 客户端获取对象:request对象
    b.不能直接获取某一个cookie,只能一次性将所有的cookie拿到
    通过F12发以发线,除了自己设置的Cookie之外,还有一个name为JSESSIONID的cookie
    使用Cookie实现记住用户名功能

  2. session(服务端)

    session:会话(如从打开浏览网站到关闭为一个会话)
    a. session储存在服务端
    b. session是在同一个用户请求时共享
    c. 实现机制:第一次客户请求时产生一个sessionID并复制给cookie的JESSIONID,然后发给客户端。最终通过session的sessionID-JESSIONID一一对应
    session机制:
     客户端第一次请求服务端时,(会匹配一下JESSIONID与sessionID,但会失败,找不到)服务端会产生一个session对象(保存该客户的信息),并且每个session对象都会有一个唯一的sessionID(用于区分其他session)。
     服务端又会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionID的值。然后服务端会在相应客户端的同时将该cookie发送给客户端。至此客户端就有了一个cookie(JSESSIONID)。因此客户端的cookie就可以和服务端的session一一对应(JESSIONID-sessionID)
     客户端第2-n次请求服务端时,服务端会先用客户端的cookie中的JSESSIONID去服务端的session中匹配sessionID,如果匹配成功(cookie的JSESSIONID和session的sessionID),说明此用户不是第一次访问,就不用登陆了。
     session是同一个会话共享(不同浏览器是不同的session,对于一个session,每个jsp都是共享这个session的,例如在check.jsp里面把uname的值存到session中,在另一个A.jsp中<%=session.getAttribute(“uname”)>可以直接打印出之前在login.jsp里面输入的值)
    session方法:
    String getID():获取sessionID
    boolean isNew():判断是否是第一次访问(新用户)
    void invalidate():使session失效(退出登录、注销)
    voidsetAttribute():设置属性值
    Object getAttribute()
    void setMaxInactiveInterval(秒):设置最大有效非活动时间(超过这个时间session失效,要重新登录)
    int getMaxInactiveInterval()

  1. application全局对象

    String getContextPath() 虚拟路径
    String getRealPath(String name) 绝对路径(虚拟路径相对的绝对路径)

  1. config配置对象

    服务器配置信息

  1. page当前jsp页面对象

    相当于JAVA里面的this

  1. exception

    异常对象

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

pageContext JSP页面容器(page对象,不是上面的那个page) 当前页面有效(页面跳转后无效)
request 请求对象 同一次请求有效(请求转发有效,重定向无效,因为重定向对于browser来说是两次请求了)
session 会话对象 同一次会话有效(浏览器不关/不换,都是一次会话即从登陆到退出之间全都有效)
application 全局对象 全局有效(整个项目有效,切换浏览器仍然有效。关闭服务、其他项目 均无效。如果想重启、多个项目共享,可以采用JNDI)
 以上4个对象的共有方法:
Object getAttribute(String name) 根据属性名,设置属性名
void setAttribute(String name,Object obj) 设置属性值(新增,修改)
 setAttribute(“a”,”b”)如果a不存在,则创建a并且将a的值改为b
void removeAttribute(Stirng name)根据属性名,删除对象
 注意点:

  1. 以上4个范围对象,通过setAttribute()赋值,通过getAttribute()取值
  2. 以上范围对象,尽量使用最小的范围。因为对象范围越大,造成的性能损耗越大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值