喉咙、肩膀要放松。
http协议。(浏览器和web服务器的交互)
tcp/ip协议栈不需要我们关注,操作系统实现了。调用os的协议栈 来进行交互。
tcp\ip只负责传输数据。(010101串),数据代表什么意思,需要另外协议的支撑。http(只关心格式,不关心传输)
socket就是调用os的协议栈。
cookie在哪儿?头?请求体里面,发送请求的时候将cookie发过去。
http请求:第一部分,请求行,说明请求类型(请求方式),要访问的资源以及所使用的http版本。
post + 空格+ +空格+协议版本号 回车换行
第二部分:请求头,附带一些客户端的信息,请求主机的路径(ip+端口),浏览器的语言(中英文)浏览器类型等
这一部分有多行 接下来 再空一行,代表结束(什么都没有)
第三部分:请求数据(请求体),(get请求这部分没有(所以只能写到第一部分后边),而第一部分是有大小限制的),post写在post主题里。
默认转成utf8.(请求行里面的编码,在。xml里面去配置)
setcharacter这个设置的是请求体的编码格式。
http响应:
第一部分:状态行:告诉浏览器,http协议版本号,状态码(你的消息是什么情况,200 没问题 还有描述 ok) + 空格
第二部分:响应时间点,服务器端,内容长度,内容类型,内容编码 空行。
第四部分:相应的内容主体
tomcat一般只是应用程序服务器(调一段代码),如果静态页面少,才使用,它集成有这个功能。
而静态多,则使用专门的web服务器。
http只能被动的取数据,不能主动发送数据
使用ajax每隔几秒去一次。
java1.4之前是java2e,之后编程javaEE。他是一套技术。如javase(集合,包装类,jdbc 这些是se的技术)。
javaee 20多个技术集合,javaEE-web有servlet、jsp、el、jstl(嵌入java代码,以前格式兼容不好) 、websocket(浏览器和服务器建立长连接,服务器可以实时传数据给客户端,不必等客户端来取)、json-p -b(出现比较晚,然后处理json不使用它) 、jsf
如果用se的话,应用服务器(jsp、servlet容器)都得自己写,写web的时候。
servlet技术,拥有相关api,规范(让其他应用厂家去写应用服务器,怎样去调用代码片段)。 然后我们只要写servlet中调用的代码就行了。
tomcat本身包含http服务器(就是老师说的web服务器),有apache基金会下的jakarta项目开发的jsp、servlet容器,暗号javaee规范,支持servlet、jsp(包括jstl、el),可以将其视为扩展的web应用服务器。因为包含web服务器。
java_home配置完,安装tomcat,因为他要找jdk。
/conf下存放tomcat服务器的各种配置文件
webapps 存放我们的应用
/work jsp转成的servlet在此目录下。(出现问题,改了jsp还是不对,有可能这)
server.xml 里面配置tomcat的端口
already 是端口被占。
如果是动态页面,就必须有web-info,静态的随便的目录名字都可以。
web-info/web.xml 应用配置
/classess 放的编译后的字节码文件,servlet编译后的.class文件
/ lib 存放jar包等。依赖包,web使用jar包文件。
获取提交的数据,然后给响应。
直接敲地址发送的请求是get的。form、超链接默认都是get。
先调用os的tcp、ip协议栈(java是socket)链接到服务器。
调用servlet的时候,以前在xml文件里面进行配置。根据请求行第一个单词,来确定调用doget、dopost方法。
request
注解会将放到一个容器里面 servlet就可以,不需要再加一个web.xml
那个框架 就是 4.20之前 0428 request对象
重定向 sendredirect 两次请求,0444,两个request对象。第二次请求是浏览器自动发出。
forward是这个servlet调用另一个servlet,
forward是只能到当前应用的页面。
提交完请求之后,使用redirect, 如a.servlet->a.jsp 他就不会进行重复提交了。如果forward他还是到a.servlet可能会进行重复提交。
request有几个?cookie和attribute
redirect可以重定向到外部资源,
一次请求是一个request对象,使用同一个Attribute。
第二次请求和那个请求关联
cookie里面放一个sessionid,随机成成的序列号。。 session对象,放在服务器hashmap里面,key是sessionid。
jsessionid 存放在cookie里面,默认是关闭浏览器就会清除。
两种方法销毁session。自己定义web.xml定义session超时时间。下一次gc就会清除掉。 或者我们主动调用 invalidate方法强制性注销掉session。
http无状态,为了维持状态,只能使用session来进行状态的维持。如张三和李四。登录之后得看是谁下的订单。
注销,会把session对象销毁。
servletcontext(就是jsp里面的application)和tomcat进行交互的(和tomcat一一对应)。servlet生存的环境。只要tomcat没有停掉,这里面的数据就一直有效。
当前请求范围内,所经过的servlet对象都可以通用。
servlet的生命周期由tomcat来整的。 加载.class文件new对象
servlet是单例。所以不能使用成员变量,局部变量。
当前请求,就放request,单个用户session,多个用户都要用就使用servletcontext。
加载实例化,
(session,servletcontext,request)监听器可以在生命周期开始做一些初始话的工作,把一些公共的东西放到servletcontext里面去。
request也可以注册监听器,他也有生命周期。servlet有生命周期。
过滤器,判断进行登录认证,或者多个servlet设置字符编码,让他们都通过这个过滤器,减少代码的书写量。
过滤器不会自动调用servlet,
getpost区别:
浏览器的POST请求都来自表单提交。每次提交,表单的数据被浏览器用编码到HTTP请求的body里。浏览器发出的POST请求的body主要有有两种格式,一种是application/x-www-form-urlencoded用来传输简单的数据,大概就是"key1=value1&key2=value2"这样的格式。另外一种是传文件,会采用multipart/form-data格式。采用后者是因为application/x-www-form-urlencoded的编码方式对于文件这种二进制的数据非常低效。
浏览器在POST一个表单时,url上也可以带参数,只要<form action="url" >里的url带querystring就行。只不过表单里面的那些用<input> 等标签经过用户操作产生的数据都在会在body里。
请求转发和请求重定向:
请求转发,在doget里面调用就调用下一个的doget。使用请求转发,当前的请求对象被转发到下一个资源。
,,常用api,request,response,session及原理。
请求体应该在cookie
servlet有那些常用类