一、JSP
JSP即服务端脚本语言,应用于动态网页。
1、静态、动态
(1)不用和是否有“动感”混为一谈
(2)区别:是否随着时间、地点、用户操作的改变而改变
2、JSP执行流程
jsp- java(Servlet文件,Jsp 和Servlet 可以相互转换 ) -class
因为第一请求服务端 会有翻译 和编译的过程,因此比较慢; 后续访问 可以直接访问class,因此速度较快。
如果 服务端修改了代码,则再次访问时会重新的翻译、编译。、
3、page指定的属性
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date" %>
language:jsp页面使用的脚本语言
import:导入类
pageEncoding:jsp文件自身编码 jsp ->java
contentType:浏览器解析jsp的编码
二、架构
1、CS:Client Server
CS不足:
a.如果 软件升级, 那么全部软件都需要升级
b.维护麻烦:需要维护每一台 客户端软件
c.每一台客户端 都需要安装 客户端软件
2、BS :Broswer Server
客户端可以通过 浏览器 直接访问服务端
注意:bs和cs各有优势。
三、tomcat
1、解压后目录
bin:可执行文件(startup.bat shutdown.bat)
conf:配置文件(server.xml)
lib:tomcat依赖的jar文件
log:日志文件(记录出错等信息)
temp:临时文件
webapps:可执行的项目(将我们开发的项目 放入该目录)
work:存放由jsp翻译成的java,以及编辑成的class文件(jsp ->java ->class)
2、HTTP状态码
200:一切正常
300/301: 页面重定向 (跳转)
404:资源不存在
403:权限不足 (如果访问a目录,但是a目录设置 不可见)
500:服务器内部错误(代码有误)
四、请求方式
1、get
method=“get” 和 地址栏 、超链接()请求方式 默认都属于get提交方式
get与post请求方式的区别:
a. get方式在地址栏显示 请求信息 (但是地址栏能够容纳的 信息有限,4-5KB;如果请求数据存在大文件,图片等会出现地址栏无法容纳全部的数据而出错) ;post不会显示
b. 文件上传操作,必须是post。
五、需求与响应
1、request
//根据请求的字段名key(input标签的name属性值),返回字段值value(input标签的value属性值)
String getParameter(String name)
//根据请求的字段名key ,返回多个字段值value(checkbox)
String[] getParameterValues(String name)
//设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
void setCharacterEncoding("编码格式utf-8") :
//请求转发 的方式跳转页面 A - > B
getRequestDispatcher("b.jsp").forward(request,response)
//获取项目的ServletContext对象
ServletContext getServerContext()
2、response
响应对象
//服务端向客户端增加cookie对象
void addCookie( Cookie cookie )
//页面跳转的一种方式(重定向)
void sendRedirect(String location ) throws IOException
//设置服务端响应的编码(设置服务端的contentType类型)
void setContetType(String type)
请求转发和重定向的区别
login.jsp -> check.jsp ->success.jsp
请求转发 重定向
地址栏是否改变 不变(check.jsp) 改变(success.jsp)
是否保留第一次 保留 不保留 --4种范围对象
请求时的数据
请求的次数 1 2
跳转发生的位置 服务端 客户端发出的第二次跳转
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PGzyEA56-1595592616987)(C:\Users\ddjj6\AppData\Roaming\Typora\typora-user-images\1564503056564.png)]
3、appliation 全局对象
String getContextPath() //虚拟路径
String getRealPath(String name)//: 绝对路径(虚拟路径 相对的绝对路径)
六、cookie和session
1、cookie
Cookie不是内置对象,是由服务端生成的 ,再发送给客户端保存。相当于本地缓存的作用:
作用:提高访问服务端的效率,但是安全性较差。
new Cookie(name,value)//建议 cookie只保存英文数字,否则需要进行编码、解码
String getName()//获取name
String getValue()//获取value
void setMaxAge(int expiry)//最大有效期(秒)
response.addCookie(Cookie cookie)//服务端准备Cookie
request.getCookies();//客户端获取cookie(只能一次性将全部的cookie拿到)
2、session
session :会话
session机制:服务每次会先用客户端cookie中的JSESSIONID 去服务端的session中匹配sessionid。
客户端第一次请求服务端时,匹配失败,服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
同时,服务端由会产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
然后 服务端会在 响应客户端的同时 将该cookie发送给客户端。因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)
客户端第二/n次请求服务端时:如果匹配成功,说明此用户 不是第一次访问,无需登录。
String getId() //:获取sessionId
boolean isNew() //:判断是否是 新用户(第一次访问)
void invalidate()//:使session失效 (退出登录、注销)
void setMaxInactiveInterval(秒) //:设置最大有效 非活动时间
int getMaxInactiveInterval()//:获取最大有效 非活动时间
3、cookie和session的区别:
session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String
七、JSP九大内置对象
内置对象:自带的,不需要new 也能使用的对象
pageContext JSP页面容器
request 请求对象
session 会话对象
appliation 全局对象
response 响应对象
config 配置对象(服务器配置信息)
out 输出对象
page 当前JSP页面对象(相当于java中的this)
exception 异常对象
四种范围对象(小->大)
a.pageContext 当前页面有效 (页面跳转后无效)
b.request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)
c.session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 )
d.application 全局变量;整个项目运行期间都有效 (切换浏览器仍然有效);关闭服务、其他项目无效
->多个项目共享、重启后仍然有效 :JNDI
以上4个对象共有的方法:
Object getAttribute(String name)//:根据属性名,或者属性值
void setAttribute(String name,Object obj) //:设置属性值(新增,修改)
//setAttribute("a","b") ;如果a对象不存在,则新建一个a对象 ;如果a之前已经存在,则将a的值改为b
void removeAttribute(String name)//:根据属性名,删除对象
以上范围对象,尽量使用最小的范围。因为对象的范围越大,造成的性能损耗越大。