自定义快捷键
自定义idea快捷键
- 首先找到你想做的快捷键的位置, 鼠标停留上去, 浮出一个标签, 根据②和③来找到该按钮在keymap(键映射)中的位置
1. 工程路径问题及解决方案
问题:
1.1 相对路径
1.使用相对路径来解决, 有一个非常重要的原则: 页面所有的相对路径, 在默认情况下, 都会参考当前浏览器地址栏的路径http://ip:port/工程路径/资源 来进行跳转.
2.如果加了base标签, 相对路径就会参考base标签配置的路径.
1.2 相对路径缺点
- …/的困扰
- 相对路径总是会依赖浏览器的地址栏, 所有不推荐使用. 如果需要指定页面相对路径参考的路径, 可以使用base标签来指定
1.3 base标签
- base标签是HTML语言中的基准网址标记, 它是一个单标签, 位于网页头部文件的head标签内
- 一个页面最多只能使用一个base元素, 用来提供一个指定的默认目标, 是一种表达路径和连接网址的标记
- 常见的url路径形式分别有相对路径和绝对路径, 如果base标签指定了目标, 浏览器将通过这个目标来解析当前文档中所有的相对路径, 包括的标签有(a标签, img标签, link标签, form标签)
- 也就是说, 浏览器解析时会在路径前加上base给的目标, 而页面中的相对路径也都转换成了绝对路径. 使用了base标签就应带上href属性和target属性
浏览器对首位 / 的解析规则
浏览器对首位 / 的解析规则
服务器对首位 / 的解析规则
服务器对首位 / 的解析规则
默认的方式即参考当前的路径, 所以最好是加上/, 因为servlet并不总是直接在webpath下的
1.4 课堂作业
题目1: 由login.html跳转到user.html的所有方法
- 不借助Servlet
- 借助Servlet
默认的方式即参考当前的路径, 所以最好是加上/, 因为servlet并不总是直接在webpath下的
题目2: 由user.html返回到login.html的所有方法
解决方案:
默认的方式即参考当前的路径, 所以最好是加上/, 因为servlet并不总是直接在webpath下的
1.5 注意细节
- web工程的相对路径和绝对路径
- 相对路径
- .表示当前目录
- …表示上一级目录
- 资源名
- 表示当前目录 / 资源名
- 绝对路径
- http://ip:port/工程路径 / 资源路径
- 在实际开发中, 路径都是用绝对路径, 而不是相对路径
- 在web中, / 斜杠如果被浏览器解析, 得到的地址是: http://ip[域名]:port/, 比如<a href=“/”>fds</a>
- 在web中, / 斜杠如果被服务器解析, 得到的地址是: /工程路径/, 你也可以理解为http://ip[域名]:port/工程路径/, 下面几种情况就是如此:
- <url-pattern>/servletUrl<url-pattern>
- servletContext.getRealPath(“/”)
- request.getRequestDispatcher(“/”)
- 在javaWeb中, 路径最后带 / 和不带 / 含义不同, 一定要小心
比如<a href=“/a/servlet03”>网址</a> servlet03表示资源; <a href=“/a/servlet03/”>网址</a> servlet03表示路径
- 特别说明: response.sendRedirect(“/”); 这条语句虽然是在服务器执行的, 但是服务器把斜杠 / 发送给浏览器解析. 因此得到地址 http://ip[域名]:port/
小结: 在编写资源路径时, 要考虑这么几点:
- 这个路径 前面有没有 /
- 如果有, 这个路径是在哪里被解析的, 是在服务器还是在浏览器. 如果是在浏览器端被解析的, 被解析成 http://ip:port/; 如果是在服务器端被解析的, 被解析成 /工程路径/.
- 如果没有 / , 并且在浏览器被解析, 则以浏览器当前的地址栏 去掉 资源部分作为一个相对路径的参考路径.
- 这个路径 最后有没有 / , 如果最后有 / , 表示一个路径; 如果没有 / , 表示定位一个资源
1.6 重定向作业
题目: 写出login.html在通过Servlet重定向情况下, 如何通过表单提交,找到user.html, 写出所有方法
解决方案:
写法3:
1.7 web工程路径优化
2. Cookie技术
2.1 Cookie简单示意图
- Cookie是服务器在客户端保存的用户信息, 比如登录名, 浏览历史等, 就可以以cookie的方式保存
- Cookie信息就像是小甜饼(cookie)一样, 数据量并不大, 服务器端在需要的时候可以从客户端读取
位置
2.2 Cookie常用方法
- Cookie有点像一张表(K-V), 分两列, 一个是名字, 一个是值, 数据类型都是String, 都是小量的数据, 如图
- 如果创建一个Cookie(在服务端创建)
Cookie cookie = new Cookie(String name, String val);
cookie.setMaxAge();//保存时间- 如何将一个Cookie添加到客户端
response.addCookie(cookie);- 如何读取cookie(在服务端读取cookie信息)
request.getCookies();
2.2 Cookie创建
新建一个Web工程->添加Web框架->新建lib, 引入servlet包Add as Library->配置tomcat->创建Servlet->浏览器抓包
2.3 Cookie读取
2.3.1 JSESSIONID
- 提示: 访问Servlet(比如 http://localhost:8088/cs/updateCookie)不会生成JSESSIONID, 访问http://localhost:8088/cs/才会生成
- 要关闭浏览器再开一个新的, 才能产生一个新的session绘画
2.3.2 读取指定Cookie
2.4 Cookie修改
2.5 Cookie生命周期
- Cookie的生命周期是指如何管理Cookie什么时候被销毁(删除)
- setMaxAge()
- 正数, 表示在指定的秒数后过期, 但仍存在于浏览器中
- 0表示马上在浏览器端删除Cookie
这里为何会有两个Set-Cookie?
- 负数, 表示浏览器关闭, Cookie就会被删除(默认值是-1)
2.6 Cookie的有效路径
规则如下:
cookie1.setPath = /工程路径
cookie2.setPath = /工程路径/aaa
请求地址: http://ip:端口/工程路径/资源
cookie1 会发送给浏览器
cookie2 不会发送给浏览器
请求地址: http://ip:端口/工程路径/aaa/资源
cookie1 会发送给服务器
cookie2 会发送给服务器
2.7 Cookie作业布置
2.8 Cookie注意事项
- 一个Cookie只能标识一种信息, 它至少含有一个标识该信息的名称(Name)和设置值(Value)
- 一个Web站点可以给一个浏览器发送多个Cookie, 一个浏览器也可以存储多个Web站点提供的Cookie
- Cookie总的数量没有限制, 但是每个域名的Cookie数量和每个Cookie的大小是有限制的(不同的浏览器限制不同), Cookie不适合存放数据量大的信息
2.8.1 Cookie中文乱码问题
如果存放中文的cookie, 会报错, 可以通过url编码和解码解决
3. Session技术
- Session是服务器端技术, 服务器在运行时会为每一个用户的浏览器创建一个其独享的session对象/集合
- 由于session为各个用户浏览器独享, 所以用户在访问浏览器的不同页面时, 可以从各自的session中读取/添加数据, 从而完成相应任务
3.1 Session原理示意图
- 当用户打开浏览器, 访问某个网站, 操作session时, 服务器就会在内存(在服务端)为该浏览器分配一个session对象, 该session对象被这个浏览器独占
- 这个session对象也可看作是一个容器/集合, session对象默认存在时间30min(Tomcat的conf/web.xml中配置的), 也可修改
- session可以做什么?
- 网上商城的购物车
- 保存登陆用户的信息
- 将数据放入到Session中, 供用户在访问不同页面时, 实现跨页面访问数据
- 防止用户非法登录到某个页面
- Session存储结构示意图
- 你可以把Session看作是一种容器类似HashMap, 有两列(K-V), 每一行就是session的一个属性.
- 每个属性包含有两个部分, 一个是该属性的名字(String), 另一个是该属性的值(Object)
3.2 Session常用方法
- 创建和获取Session
HttpSession hs = request.getSession()
第一次调用是创建Session会话, 之后调用是获取创建好的Session对象 - 向session添加属性
js.setAttribute(String name, Object obj) - 从session得到某个属性
Object obj = hs.getAttribute(String name) - 从session删除某个属性
hs.removeAttribute(String name) - isNew();
判断是不是刚创建出来的Session - 每个Session都有1个唯一标识Id值. 通过getId() 得到 Session的会话 id值
3.2 Session底层机制
项目重新发布Session会清空
3.3 Session生命周期
3.3.1 Session生命周期说明
- public void setMaxInactiveInterval(int interval), 设置Session的超时时间(以秒为单位), 超过指定的时长, Session就会被销毁
- 值为正数的时候, 设定Session的超时时长
- 负数表示永不超时
- public int getMaxInactiveInterval()获取Session的超时时间
- public void invalidate() 让当前Session会话立即无效
- 如果没有调用setMaxInactiveInterval()来指定Session的生命时长, Tomcat会以Session的默认时长为准, Session的默认超时时间为30min, 可以在tomcat的web.xml中配置
- Session的生命周期指的是: 客户端/浏览器两次请求的最大间隔时长, 而不是累积时长, 即当客户端访问了自己的session, session的生命周期将从0开始重新计算
- 底层: Tomcat用一个线程来轮询会话状态, 如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁
3.3.2 Session生命周期实例
解读: Session的生命周期文章来源:https://www.toymoban.com/news/detail-411518.html
- 指的是两次访问session的最大间隔时间
- 如果你在session没有过期的情况下, 操作session, 则会重新开始计算生命周期
- session是否过期, 是由服务器来维护和管理
- 如果我们调用了invalidate(), 会直接将该session删除/销毁
- 如果希望删除session对象的某个属性, 使用removeAttribute(“xx”)
3.4 Session作业
文章来源地址https://www.toymoban.com/news/detail-411518.html
到了这里,关于web路径专题+会话技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!