Jsp基础

一.JSP的页面元素

a. 脚本 ScrptLet
1. <% 局部变量、java语句%>

  1. <%! 局部变量、定义方法>
  2. <%=输出表达式 %>

一般而言,修改web.xml、配置文件、java代码,需要重启服务,但是如果修改Jsp\html\css\js,不需要重启。


b. 指令
page指令
<%@ page .... %>
page指定的属性:
language:jsp页面使用的脚本语言
import:导入类
pageEncoding:jsp文件自身编码 jsp => java
contentType:浏览器解析jsp的编码


c. 注释

  1. html注释 < !-- -->,可以被用户通过浏览器查看源码看到
  2. java注释 // /......./
  3. jsp注释 <%-- --%>

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

  1. out: 输出对象,向客户端输出内容
  2. request:请求对象,存储客户端向服务端发送的请求信息
    request对象的常见方法:
    String getParameter(String name) 根据请求的字段名key,返回字段值value input标签的value属性值
    String[] getParameterValues(String name) 根据请求的字段名key,返回多个字段值value(checkbox 复选框)
    void setCharacterEncoding("编码格式"):设置post请求编码,tomcat7以前默认iso-8859-1,tomcat8以后用utf-8
    getRequestDispatcher("b.jsp").forward(request,response): 以请求转发的方式跳转页面,A => B
    ServletContext getServletContext(): 获取项目的ServletContext对象
    http://localhost:8080/show.jsp?uname=zs&upwd=avc&uage=29&uhobbies=%E8%B6%B3%E7%90%83&uhobbies=%E7%AF%AE%E7%90%83
    get提交方式:method="get" 和 地址栏、超链接<a href="xx"/> 请求方式 默认都是get请求方式

get与post请求方式的区别

  1. get方式 在地址栏显示 请求信息(但是地址栏能够容纳的信息有限,4-5KB;如果请求数据存在大文件,图片等会出现地址栏无法容纳大小而出错);post不会.
  2. 文件上传操作,必须是post
    推荐使用post

get方式请求,如果出现乱码,如下解决方案:

  1. 统一每一个变量的编码(不推荐)
    new String(就旧码,新编码);
    name = new String(name.getBytes("iso-8859-1","utf-8"));
  2. 修改server.xml,一次性的更改tomcat默认get提交方式的编码(utf-8)
    建议 使用tomcat时,首先再server.xml中 统一个体方式的请求方式的编码。。。 修改端口号那一行添加URIEncoding="UTF-8"
    tomcat8以后默认时utf-8

  1. resonse:响应对象
    提供的方法:
    void addCookie(Cookie cookie): 服务端向客户端增加cookie对象
    void senRedirect(String location) throws IOException: 页面跳转的一种方式,重定向
    void setContentType(String type):设置服务端响应的编码(设置服务端的contentype)

示例:登陆
login.jsp => check.jsp => success.jsp

请求转发 重定向
地址栏是否改变 不变check.jsp 改变success.jsp
是否保留第一次请求时的数据 保留 不保留
请求次数 1次 2次

  1. pageContext jsp页面容器

  1. session(存在于服务端):绘画
    讲session前先了解cookie;
    Cookie(存在于客户端,不是内置对象):Cookie是由服务端生成的,再发送给客户端保存。
    相当于 本地缓存的作用: 客户端(hello.mp4,zs/abc)=>服务端(hello.mp4,zs/abc)
    作用:提高访问服务端的效率,但是安全性较差。
    Cookie:name=value
    javax.servlet.htttp.Cookie
    public Cookie(String name, String value)
    String getName():获取name
    String getValue():获取value
    void setMaxAge(int expire):最大有限期(秒)
    服务端准备cookie:
    response.addCookie(Cookie cookie)
    页面跳转(转发,重定向)
    客户端获取cookie:request.getCookies();
    a. 服务端增加cookie: response对象; 客户端获取cookie:request对象
    b. 不能直接获取某一个单独对象,只能一次性将全部的cookie拿到
    通过F12可以发现 除了自己设置的cookie外,还会得到一个name为JSSESSIONID的cookie
    session:会话
    a. 浏览网站:开始-关闭
    b. 购物: 浏览、付款、退出
    c. 电子邮件: 浏览、写邮件、退出
    开始-结束为一次会话

session机制
客户端第一次请求服务端时, 服务端会产生一个session对象(用户保存该客户的信息),并且每个session对象都会有一个唯一的sessionId(用于区分其他session),并且服务端也会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端的sessionId的值,然后 服务端会在响应客户端的同时将该cookie发送给客户端 ,至此 客户端就有了一个cookie(JSESSIONID),因此,客户端的cookie就可以和服务端的session一一对应(JSESSSIONID=>sessionId)
客户端第2/n次请求服务端时:服务端会先用客户端cookie中的JSESSIONID 去服务端的session中匹配sessionId,如果匹配成功,说明此用户已不是第一次访问
生活实例:
客户端:顾客(第一次存包后拿到号码牌)
服务端:存包处

session方法:
String getId():获取sessionId
boolean isNew():判断是否是新用户(第一次访问)
void invalidate():使session失效(退出登陆、注销)

setAttribute();
getAttribute();

void setMaxInActiveInterval(秒):设置最大有效时间,

session创建过程.png
  1. application 全局对象
    String getContextPath() 获取当前项目虚拟路径
    String getRealPath() 获取当前项目的绝对路径
  2. config 配置对象(服务器配置信息)
  3. page 当前JSP页面对象(相当于java中的this)
  4. exception 异常对象


    request.png

    请求转发.png

    重定向.png

四个范围对象(从小到大)
pageContext jsp
页面容器: 当前页面有效(跳转后无效)
request 请求对象:同一次请求有效
session 会话对象: 同一次会话有效
application 全局对象:全局有效;整个项目运行期间 都有效;关闭服务、其他项目无效
=》多个项目共享、重启后仍然有效: JNDI
以上4个对象共有的方法:
Object getAttribute(String name ):根据属性名,获取属性值
void setAttribute(String name, Object obj) 设置属性值
setAttribute("a","b")//如果a不存在,则创建一个新的,如果存在则覆盖
removeAttribute("a")根据属性名删除对象
建议以上范围对象在使用时尽量用最小的范围,对象范围越大造成的性能损耗越大。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.JSP注释1./........./ Java代码注释,页面不显示,客户端不可见2<!-- ..... --...
    寞离i阅读 258评论 0 1
  • 1课程回顾 会话管理 1)会话管理:管理浏览器和服务器之间的会话过程中产生的会话数据 2)Cookie技术:会话数...
    守亭翁阅读 329评论 0 0
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,542评论 0 13
  • jsp指令 page指令:<%@ page language="java"import="java.util*,j...
    jarWorker阅读 438评论 0 8
  • 今天周一,晚上又被蹂躏了一个小时。 热身运动没了,换成了波比跳,20个一组。 休息一分钟左右,高抬腿1分钟,休息一...
    小宝_cde4阅读 240评论 0 0