无论本次请求涉及到多少个servlet,用尸只需手动通过浏览器发送一次请求servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间往返次数增加处理服务速度
.HttpServletRequest对象中都有什么信息?都包装了什么信息?HttpServletRequest对象是Tomcat服务器负责创建的。这个对象中封装了HTTP的请求协议。实际上是用户发送请求的时候,遵循了HTTP协议,发送的是HTTP的请求协议,Tomcat服务器将HTTP协议中的信息以及数据全部解析出来,然后Tomcat服务器把这些信息封装到HttpServletReguest对象当中,传给了我们javaweb程序员。
URI和URL什么关系,有什么区别?URL包括URIhttp://localhost:8080/servletO5/index.html是URL。servlet05/index.html是URI。
Serlet的无参数构造方法是在对象第一次创建的时候执行,并且只执行一次。init方法也是在对象第一次创建的时候执行,并且只执行一次。那么这个无参数构造方法可以代替掉init方法吗?不能。Servlet规范中有要求,作为javaweb程序员,编写Servlet类的时候,不建议手动编写构造方法,因为编写构造方法,很容易让无参数构造方法消失,这个操作可能会导致Servlet对象无法实例化。所l以init方法是有存在的必要的。
Servletcontext是谁实现的?Tomcat服务器(WEB服务器)实现了ServletContext接口。publicclassorapachcatalincorApplicationContextFacadeimplements{}
工作原理
请求域对象和应用域对象
HttpServletRequest对象中封装了什么信息?
ServletContext接口(上文)
通过servletcontext对象记录日志
ServletContext:全局作用域对象HttpSession:会话作用域对象HttpServletRequest:请求作用域对象
ServletContext只要在同一个webapp应用当中,所有的Serlet对象都是共享同一个ServletContext对象的。ServletContext对象是应用级对象。Tomcat服务器中有一个webapps,这个webapps下可以存放webapp,可以存放多个webapp,假设有N个webapp,那么就有N个ServletContext对象。总之,一个应用,一个webapp肯定是只有一个ServletContext对象。
请求协议浏览器向WEB服务器发送数据的时候,这个发送的数据需要遵循—套标准,这套标准中规定了发送的数据具体格式。
应用域对象
Servlet对象是由谁来维护的?Servlet对象的创建,对象上方法的调用,对象最终的销毁,Javaweb程序员是无权干预的。Servlet对象的生命周期是由Tomcat服务器(WEBServer)全权负责的。Tomcat服务器通常我们又称为:WEB容器。(这个叫法你要知道【WEBContainer】)WEB容器来管理Servlet对象的死活。
Servlet类中方法的调用次数?
get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个'?','?'后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在'请求行'上发送数据)
角色
servlet规范下作用域对象:
构造方法只执行一次。init方法只执行一次。service方法:用户发送—次请求则执行一次,发送N次请求则执行N次。destroy方法只执行—次。
HTTP协议包括:
getSession():如果当前用户在服务端已经拥有了自己的私人储物柜.要求tomcat将这个私人储物柜进行返回如果当前用户在服务端尚未拥有自己的私人储物柜要求tocmat为当前用户创建一个全新的私人储物柜getSession(fals:如果当前用户在服务端已经拥有了自己的私人储物柜.要求tomcat将这个私人储物柜进行返回如果当前用户在服务端尚未拥有自己的私人储物柜此时Tomcat将返回null
当我的文件名设置为index.html的时候,不需要在wexml文件中进行配置欢迎页面。这是为什么?这是因为Tomcat服务器已经提前配置好了。实际上配置欢迎页面有两个地方可以配置:·一个是在webapp内部的wexml文件中。(在这个地方配置的属于局部配置)一个是在CATALINA_HOME/conf/wexml文件中进行配置。(在这个地方配置的属于全局配置)
index.html
index.htm
index.jsp
如果你是想从服务器上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据是收集用户的信息,一般是需要传给服务器,服务器将这些数据保存/修改等。如果表单中有敏感信息,还是建议适用post请求,因为get请求会回显敏感信息到浏览器地址栏上。(例如:密码信息)。做文件上传,一定是post请求。要传的数据不是普通文本。其他情况都可以使用get请求。
请求域对象方法:
void setAttribute(String name,object obj);// 向域当中绑定数据。
object getAttribute(string name);//从域当中根据name获取数据。
void removeAttribute(string name);//将域当中绑定的数据移除
优点
特征
ServletContext(Servlet上下文对象。)
创建一个Java类实现Filter接口重写Filter接口中doFilter方法wexml将过滤器接口实现类注册到Http服务器
设置欢迎页面
通过初始化参数的name获取value
什么是HTTP协议?HTTP协议:是W3C制定的一种超文本传输协议。(通信协议:发送消息的模板提前被制定好。)
第三步:将Servlet类配置到wexml文件当中。
名字
com.bjpowernode.controller.ProServlet
名字
/searchPro
ServletConfig是什么?jakartservlet.ServletConfigServletConfig是Servlet规范中的一员。ServletConfig是一个接口。Servlet对象的配置信息对象。
用户第一次通过手动方式要求浏览器访问Aservlet。Aservlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,申请调用Bservlet.Tomcat在接收到这个请求之后,自动调用Bservlet来完成剩余任务
怎么让服务器启动的时候创建Servlet对象呢?在servlet标签中添加子标签,在子标签中填写整数,越小的整数优先级越高。
com.bjpowernode.javaweb.AServlet
1
servlet>
aservlet
/a
Filter拦截地址格式
(在整个BS结构的系统当中,有哪些人参与进去了)
http:/localhost:8080/servlet06/logihtml这种方式是指定了要访问的就是logihtml资源
ServletContext接口常用的方法
cookie销毁时机:
思考:如果把Tomcat服务器换成jetty服务器,输出ServletConfig对象的时候,还是这个结果吗?不一定一样,包名类名可能和Tomcat不一样。但是他们都实现了ServletConfig这个规范。一个Servlet对象中有一个ServletConfig对象。(Servlet和ServletConfig对象是一对一的关系。)
据监听的实际情况,选择对应监听器接口进行实现2重写监听器接口声明【监听事件处理方法】3在wexm1文件将监听器接口实现类注册到Http服务器
Servlet类路径
请求地址既可以把当前网站内部的资源文件地址发送给浏览器(/网站名/资源文件名)也可以把其他网站资源文件地址发送给浏览器(http://ip地址:端口号/网站名/资源文件名)英',请求次数浏览器至少发送两次请求,但是只有第一次请求是用户手动发送。后续请求都是浏览器自动发送的。请求方式重定向解决方案中,通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件接收的请求万式一定是GET
浏览器软件的开发团队。DBServer的开发团队(DBServer软件:Oracle、MySQL……)webapp的开发团队(WEB应用是我们做为JavaWEB程序员开发的)·
要求Tomcat在调用某一个文件夹下所有的资源文件之前,来调用onerilter拦截
/img/ *
结论:用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了。并且执行的是无参数构造方法。)AServlet对象被创建出来之后,Tomcat服务器马上调用了AServlet对象的init方法。(init方法在执行的时候,AServlet对象已经存在了。已经被创建出来了。)用户发送第一次请求的时候,init方法执行之后,Tomcat服务器马上调用AServlet对象的service方法。用户继续发送第二次请求,控制台输出了以下内容:AServlet’sservice!
Servlet对象生命周期默认情况下服务器启动的时候AServlet对象并没有被实例化。用户发送第一次请求的时候,控制台输出了以下内容:
import javax.servlet.*;
import java.io.IOException;
public class AServlet implements Servlet {
public AServlet(){
System.out.println('AServlet's 无参构造!');
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println('AServlet's init!');
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println('AServlet's service!');
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println('AServlet's destroy!');
}
}
结果:
第一次调用:
AServlet无参构造!
AServlet's init!
AServlet's service!
第二次调用:
AServlet's service!
关闭服务器:
AServlet's destroy!
数据存储格式:前端提交的数据格式:username=abc&userpwd=123&aihag=s&aihag=d&aihao=t采用Map集合来存储:Map
常用方法
Map getParameterMap()获取Map
Enumeration getParameterNames()获取Map集合中所有的key
String[] getParametervalues(String name)根据key获取Map集合的value
String getParameter(String name)获取value这个一维数组当中的第一个元素。
String getRemoteAddr ()获取客户端的IP地址
String getContextPath()获取应用的根路径
String getMethod()获取请求方式
String getRequestURI()获取请求的URI
String getservletPath()获取servlet path
ServletConfig对象中包装的信息是:wexml文件中
原理
HTTP的响应协议包括:4部分
原理
什么是一个web站点的欢迎页面?
Browser和WebServer之间有一套传输协议:HTTP协议。(超文本传输协议。)owebapp开发团队和DBServer的开发团队之间有—套规范:JDBC规范。
请求域和应用域的选用原则:尽量使用小的域对象,因为小的域对象占用的资源较少。
第Servlet对象是单例的(单实例的。但是要注意:Servlet对象是单实例的,但是Servlet类并不符合单例模式。我们称之为假单例。之所以单例是因为Servlet对象的创建我们javaweb程序员管不着,这个对象的创建只能是Tomcat来说了算,Tomcat只创建了一个,所以导致了单例,但是属于假单例。真单例模式,构造方法是私有化的。)第无参数构造方法、init方法只在第一次用户发送请求的时候执行。也就是说无参数构造方法只执行一次。init方法也只被Tomcat服务器调用一次。第三∶只要用户发送一次请求:service方法必然会被Tomcat服务器调用一次。发送100次请求,service方法会被调用100次。第关闭服务器的时候,控制台输出了以下内容:Aservlet’sdestroy!Servlet的destroy方法只被Tomcat服务器调用一次。
获取所有的初始化参数的name
要求Tomcat在调用网站中任意文件时,来调用onerilter拦截
/*
“请求域'对象要比'应用域'对象范围小很多。生命周期短很多。请求域只在一次请求内有效。一个请求对象request对应一个请求域对象。一次请求结束之后,这个请求域就销毁了。
请求头请求的主机主机的端口浏览器信息.平台信息.cookie等信息
B/SB/S结构的系统(浏览器访问WEB服务器的系统)。浏览器向WEB服务器发送数据,叫做:请求(request)WEB服务器向浏览器发送数据,叫做:响应(respons
设置了欢迎页面之后,当你访问这个webapp的时候,没有指定任何'资源路径',这个时候会默认访问你的欢迎页面。
用户第一次通过【手动方式】通知浏览器访问Aservlet。Aservlet工作完毕后,将Bservlet地址写入到响应头location属性中,导致Tomcat将302状态码写入到状态行。在浏览器接收到响应包之后,会读取到302状态。此时浏览器自动根据响应头中location属性地址发起第二次请求,访问Bservlet去完成请求中剩余任务
第九步:让IDEA工具去关联Tomcat服务器。关联的过程当中将webapp部署到Tomcat服务器当中。IDEA工具右上角,绿色小锤子右边有一个:AddConfiguration左上角加号,点击TomcatServer-->local
监听器
ServletConfig对象是谁创建的?在什么时候创建的?Tomcat服务器(WEB服务器)创建了ServletConfig对象。在创建Servlet对象的时候,同时创建ServletConfig对象。他们都是在用户发送第一次请求的时候创建。
服务器在启动的Servlet对象有没有被创建出来?。在Servlet中提供一个无参数的构造方法,默认情况下,服务器在启动的时候Servlet对象并不会被实例化。因为用户没有发送请求之前,如果提前创建出来所有的Servlet对象,必然是耗费内存的,并且创建出来的Servlet如果一直没有用户访问,显然这个Servlet对象是一个无用的Servlet,没必要先创建。
.谁实现了ServletConfig接口?WEB服务器实现了publicclassorapachcatalinconStandadWInapperFacadeimplementsServletConfig{}结论:Tomcat服务器实现了ServletConfig接口。
Httpsession空闲时间手动设置在当前网站/web/WEB一INF/wexml
第四步:准备前端的页面,指定请求路径即可。
Web欢迎页面
HttpSession销毁时机:
Filter接口实现类开发步骤
响应协议WEB服务器向浏览器发送数据的时候,这个发送的数据需要遵循—套标准,这套标准中规定了发送的数据具体格式。
HTTP协议
Servlet规范的作用是什么?WEBServer和webapp解耦合。
请求次数在请求转发过程中,浏览器只发送一次请求
post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体'当中发送数据)get请求只能发送普通的字符串。并且发送的字符串长度有限制,不同的浏览器限制不同。这个没有明确的规范。get请求无法发送大数据量。post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、片。post请求可以发送大数据量,理论上没有长度限制。get请求比较适合从服务器端获取数据。post请求比较适合向服务器端传送数据。get请求是安全的。get请求是绝对安全的。get请求只是为了从服务器上获取数据。不会对服务器造成威胁。post请求是危险的。post请求是向服务器提交数据,如果这些数据通过非法的方式进入到服务器当中,服务器是很危险的。另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post请求。get请求支持缓存。只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。post请求不支持缓存。post请求之后,服务器′响应的结果'不会被浏览器缓存起来。因为这个缓存没有意义。
请求域对象
获取应用的根路径〈非常重要)(因为在java源代码当中有一些地方可能会需要在java源码当中,不要将应用的根路径写死,因为你永远都不知道这个应用在最终部署的时候,起一个什么名字。)
重定向解决方案
来自于servlet规范下接口,在Tomcat中存在于servlet-apjar包Filter接口实现类由开发人员负责提供,Http服务器不负责提供在这里插入代码片Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截
获取所有的初始化参数的name
协议
命令作用:拦截地址通知Tomcat在调用何种资源文件之前需要调用onerilter过滤进行拦截
在Tomcat9之前(包括9〉,响应中文是有乱码的,怎么解决这个响应的乱码?responssetContentType(“text/html;charset=UTF-8'”);在Tomcat10之后,包括10在内,响应中文的时候就不在出现乱码问题了。以上代码就不需要设置uTF-8了。
第三步:启动服务器,浏览器地址栏输入地址http://localhost:8080/servlet(最后一部分是自定义的路径)
无论本次请求涉及到多少个servlet,用户只需要手动通知浏览器发起一次请求即可
将地址写入到响应包中响应头中1ocation属性
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println('调用AServlet');
resp.sendRedirect('/Servlet04/b');
}
}
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println('调用BServlet');
}
}
结果:
调用AServlet
调用BServlet
GET请求和POST请求如何选择?
HttpSession接口来自于servlet规范下一个接口。存在于Tomcat中servlet-apjar其实现类由Http服务器提供。Tomcat提供实现类存在于servlet-apjar如果两个servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于Httpsession对象进行数据共享开发人员习惯于将HttpSession接口修饰对象称为【会话作用域对象】
webapp的开发团队和WEBServer的开发团队之间有一套规范JavaEE规范之一Servlet规范。
HttpServletRequest,简称request对象。HttpServletRequest中封装了请求协议的全部内容。Tomcat服务器(WEB服务器)将'请求协议'中的数据全部解析出来,然后将这些数据全部封装到request对象当中了,我们只要面向HttpServletRequest,就可以获取请求协议中的数据。
通过HttpServlet接口获取请求参数
http://127.0.0.1:8080/servlet04/b?name=zhangsan&age=18
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Map parameterMap=req.getParameterMap();
Set key=parameterMap.keySet();
Iterator it=key.iterator();
while (it.hasNext()){
String keys=it.next();
String[] values=parameterMap.get(keys);
System.out.print(keys+'=');
for (String v:values){
System.out.println(v);
}
}
}
}
结果:
name=zhangsan
age=18
http://127.0.0.1:8080/servlet04/b?name=zhangsan&age=18&habbits=football&habbits=basketball
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name=req.getParameter('name');
String age=req.getParameter('age');
System.out.println(name);
System.out.println(age);
String[] habbits=req.getParameterValues('habbits');
for (String h:habbits){
System.out.println(h);
}
}
}
结果:
name=zhangsan
age=18
habbits=football
basketball
Servlet对象的生命周期
Tomcat服务器的全局欢迎页面是:index.html,index.htm,index.isp。如果你一个web站点没有设置局部的欢迎页面,Tomcat服务器就会以index.htmlindex.htmindex.isp作为一个web站点的欢迎页面。注意原则:局部优先原则。(就近原则)
多个servlet之间调用规则
放在ServletContext对象当中的数据,所有Servlet一定是共享的。
实现命令
response.sendRedirect ( '请求地址')
实际上向应用域当中绑定数据,就相当于把数据放到了缓存当中,然后用户访问的时候直接从缓存中取,减少IO的操作,大大提升系统的性能,所以缓存技术是提高系统性能的重要手段。
请求方式在请求转发过程中,浏览器只发送一个了个Http请求协议包参与本次请求的所有servlet共享同一个请求协议包,因此这些servlet接收的请求方式与浏览器发送的请求方式保持一致
根据以上输出结果得知,用户在发送第二次,或者第三次请求的时候,Servlet对象并没有新建,还是使用之前创建好的Servlet对象,直接调用该Servlet对象的service方法,这说明:
注意:设置欢迎页面的时候,这个路径不需要以'/'开始。并且这个路径默认是从webapp的根下开始查找
什么是超文本?超文本说的就是:不是普通文本,比如流媒体:声音、视频、片等。HTTP协议支持:不但可以传送普通字符串,同样支持传递声音、视频、片等流媒体信息。
Servletcontext对象是谁创建的?ServletContext对象在WEB服务器在启动的时候创建。对于一个webapp来说,ServletContext对象只有一个。ServletContext对象在服务器关闭的时候销毁。
响应头空白行响应体
ServletConfig接口有什么用?ServletConfig对象被翻译为:Servlet对象的配置信息对象。一个Servlet对象就有一个配置信息对象。
命令格式:
oneFilter
拦截地址
第一:所有用户共享的数据。第二:这个共享的数据量很小。第三:这个共享的数据很少的修改操作。
在默认情况下,cookie对象存放在浏览器的缓存中。因此只要浏览器关闭,Cookie对象就被销毁掉在手动设置情况下,可以要求浏览器将接收的cookie存放在客户端计算机上硬盘上,同时需要指定cookie在硬盘上存活时间。在存活时间范围内,关闭浏览器关闭客户端计算机,关闭服务器,都不会导致cookie被销毁。在存活时间到达时,cookie自动从硬盘上被删除
cookie.setMaxAge (60) ; cookie在硬盘上存活1分钟
用户与HttpSession关联时使用的cookie只能存放在浏览器缓存中.在浏览器关闭时,意味着用户与他的HttpSession关系被切断由于Tomcat无法检测浏览器何时关闭,因此在浏览器关闭时并不会导致Tomcat将浏览器关联的HttpSession进行销毁为了解决这个问题,Tomcat为每一个HttpSession对象设置【空闲时间】这个空闲时间默认3o分钟,如果当前HttpSession对象空闲时间达到30分钟此时Tomcat认为用户已经放弃了自己的Httpsession,此时Tomcat就会销毁掉这个HttpSession
用户通过浏览器第一次向网站发送请求申请Aservlet。Aservlet在运行期间创建一个cookie存储与当前用户相关数据Aservlet工作完毕后,将cookie写入到响应头交还给当前浏览器。浏览器收到响应响应包之后,将cookie存储在浏览器的缓存一段时间之后,用户通过同一个浏览器再次向网站发送请求申请Bservlet时。浏览器需要无条件的将网站之前推送过来的cookie,写入到请求头发送过去此时BServlet在运行时,就可以通过读取请求头中cookie中信息,得到Aservlet提供的共享数据
第—部分:协议版本号(HTTP/第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码。)
第三部分:HTTP协议版本号
这个方法获取的是以下的配置信息
pagesize
10
context-par am>
startIndex
0
第一步:编写一个Servlet类,直接继承HttpServlet
destroy方法是在什么时候被调用的?在服务器关闭的时候。因为服务器关闭的时候要销毁AServlet对象的内存。服务器在销毁AServlet对象内存之前,Tomcat服务器会自动调用AServlet对象的destroy方法。destrdly方法调用的时候,对象销毁了还是没有销毁呢?destroy方法执行的时候AServlet对象还在,没有被销毁。destroy方法执行结束之后,AServlet对象的内存才会被Tomcat释放。
作用:通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻监听事件处理方法:
public void contextInitlized () :在全局作用域对象被Http服务器初始化被调用
public void contextDestory () :在全局作用域对象被Http服务器销毁时候触发调用
默认欢迎页
请求体向服务器发送的具体数据。
HttpServlet类是专门为HTTP协议准备的。在jakartservlet.http.HttpServlet包下
拦截Http服务器,帮助Http服务器检测当前请求合法性拦截Ettp服务器,对当前请求进行增强操作
实现命令
先在导航栏输入AServlet的资源文件名,再输入BServlet的资源文件名
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie=new Cookie('name','zhangsan');
Cookie cookie1=new Cookie('name','wangwu');
resp.addCookie(cookie);
resp.addCookie(cookie1);
}
}
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookies[]=req.getCookies();
for (Cookie cookie:cookies){
String key=cookie.getName();
String value=cookie.getValue();
System.out.println(key+':'+value);
}
}
}
获取servlet的名字
通过初始化参数的name获取value
缺点重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返次数上,增加用户等待服务时间
请求行
Cookie来自于servlet规范中一个工具类,存在于Tomcat提供servlet-apjar中如果两个servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于cookie对象进行数据共享cookie存放当前用户的私人数据,在共享数据过程中提高服务质量
提高用户使用感受规则
空白行·空白行是用来区分'请求头'和“请求体”。
第一部分:请求方式(7种)get(常用的)post(常用的)deleteputheadoptionstrace第二部分:URIURL:统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。·URL:统一资源定位符。代表网络中某个资源,通过URL是可以定位到该资源的。
假设前端发送的请求是get请求,后端程序员重写的方法是doPost假设前端发送的请求是post请求,后端程序员重写的方法是doGet会发生什么呢?发送405的错误,405表示前端的错误,发送的请求方式不对。和服务器不一致。不是服务器需要的请求方式。通过以上源代码可以知道:只要HttpServlet类中的doGet方法或doPost方法执行了,必然40
在弹出的界面中设置服务器Server的参数
什么是ServletContext?ServletContext是接口,是Servlet规范中的一员。ServletContext是Servlet对象的环境对象(Servlet对象的上下文对象。)ServletContext对象其实对应的就是整个wexml文件。
格式:username{“abc”}userpwd{“111”}aihao{“s”',“d”,“tt”}
HttpServletResponse对象是专门用来响应HTTP协议到浏览器的
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if (method.equals('GET')) {
lastModified = this.getLastModified(req);
if (lastModified == -1L) {
this.doGet(req, resp);
} else {
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader('If-Modified-Since');
} catch (IllegalArgumentException var9) {
ifModifiedSince = -1L;
}
if (ifModifiedSince < lastModified / 1000L * 1000L) {
this.maybeSetLastModified(resp, lastModified);
this.doGet(req, resp);
} else {
resp.setStatus(304);
}
} else if (method.equals('POST')) {
this.doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = lStrings.getString('http.method_post_not_supported');
this.sendMethodNotAllowed(req, resp, msg);
}
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = lStrings.getString('http.method_put_not_supported');
this.sendMethodNotAllowed(req, resp, msg);
}
这种协议游走在B和S之间。B向S发数据要遵循HTTP协议。S向B发数据同样需要遵循HTTP协议。这样B和S相互不依赖才能解耦合
前提条件
Servlet类的开发步骤
我们自己new的Servlet对象是不受WEB容器管理的。WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),只有放到这个HashMap集合中的Servlet才能够被WEB容器管理,自己new的Servlet对象不会被WEB容器管理。(自己new的Servlet对象不在容器当中)web容器底层应该有一个HashMap这样的集合,在这个集合当中存储了Servlet对象和请求路径之间的关系
格式:要求Tomcat在调用某一个具体文件之前,来调用onerilter拦截
以上的4个方法,在自己编写的Servlet类当中也可以使用this去调用。(这个Servlet继承了GenericServlet)
注意:前端表单提交数据的时候,假设提交了数字,其实是以字符串的方式提交的,所以服务器端获取到的一定是一个字符串的,而不是一个数字。(前端永远提交的是字符串,后端获取的也永远是字符串。)
多个Servlet之间的调用规则
第二步:重写doGet方法或者重写doPost方法
public class ProServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
作用域对象
在servlet规范中,认为在服务端内存中可以在某些条件下为两个servlet之间提供
数据共享方案的对象,被称为【作用域对象】
HlTP的请求协议(B-->s)
实现命令
1.通过当前请求对象生成资源文件申请报告对象
RequestDispatcher report = request.getRequestDispatcher('/资源文件名');
2.将报告对象发送给Tomcat
report.forward(当前请求对象,当前响应对象)
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println('调用AServlet');
RequestDispatcher requestDispatcher=req.getRequestDispatcher('/b');
requestDispatcher.forward(req,resp);
}
}
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println('调用BServlet');
}
}
结果:
调用AServlet
调用BServlet
全限定名称:jakartservlet.http.HttpServletRequestHttpServletHttpServletRequest接口是Servlet规范中的一员HttpServletReguest接口的父接口:ServletRequest
GET请求和POST请求的区别
作用:通过这个接口合法的检测全局作用域对象共享数据变化时刻监听事件处理方法:
public void contextadd():在全局作用域对象添加共享数据时
public void contextReplaced():在全局作用域对象更新共享数据时
public void contextRemove():在全局作用域对象删除共享数据时
Filter接口(过滤器接口)
获取文件的绝对路径
get和post请求
得到servlet上下文的引用,servletcontext对象
·
HttpServletRequest接口(上文)
什么情况下会考虑向ServletContext这个应用域当中绑定数据呢?
Http包下有哪些类和接口
特征
存储位置:cookie:存放在客户端计算机(浏览器内存/硬盘)HttpSession:存放在服务端计算机内存数据类型:cookie对象存储共享数据类型只能是stringHttpSession对象可以存储任意类型的共享数据object数据数量:一个cookie对象只能存储一个共享数据HttpSession使用map集合存储共享数据,所以可以存储任意数量共享数据参照物:cookie相当于客户在服务端【会员卡】HttpSession相当于客户在服务端【私人保险柜】
作用
状态行
监听器接口实现类开发规范步骤
某些来自于浏览器发送请求,往往需要服务端中多个servlet协同处理。但是浏览器一次只能访问一个servlet,导致用户需要手动通过浏览器发起多次请求才能得到服务。这样增加用户获得服务难度
多个servlet之间数据共享实现方案
HTTP的请求协议包括:4部分
一组来自于servlet规范下接口,共有8个接口。在Tomcat存在servlet-apjar包监听器接口需要由开发人员亲自实现,Http服务器提供jar包并没有对应的实现类监听器接口用于监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】
请求转发解决方案
jakartservlet.http.HttpServlet(HTTP协议专用的Servlet类,抽象类)jakartservlet.http.HttpServletRequest(HTTP协议专用的请求对象)jakartservlet.http.HttpServletResponse(HTTP协议专用的响应对象)
第十步:启动Tomcat服务器在右上角有绿色的箭头,或者绿色的小虫子,点击这个绿色的小虫子,可以采用debug的模式启动Tomcat服务器。我们开发中建议适用debug模式启动Tomcat第十一步:打开浏览器,在浏览器地址栏上输入:http:/localhost:8080/servlet01/s
00表示请求响应成功,正常结束。404表示访问的资源不存在,通常是因为要么是你路径写错了,要么是路径写对了,但是服务器中对应的资源并没有启动成功。总之404错误是前端错误。405表示前端发送的请求方式与后端请求的处理方式不一致时发生:.比如:前端是POST请求,后端的处理方式按照get方式进行处理时,发生40比如:前端是GET请求,后端的处理方式按照post方式进行处理时,发生40500表示服务器端的程序出现了异常。一般会认为是服务器端的错误导致的。.以4开始的,一般是浏览器端的错误导致的。以5开始的,一般是服务器端的错误导致的。
ServletConfig对象中到底包装了什么信息呢?
configTest
com.bjpawernode.javaweb.servlet.ConfigTestServlet
HTTP的响应协议(S-->
ServletConfig接口中的方法
请求地址只能向Tomcat服务器申请调用当前网站下资源文件地址request.getRequestDispathcer('/资源文件名')
IDEA工具开发servlet
servlet01 //名字
com.bjpowernode.javaweb.servlet.studentServlet servlet>//类路径
servlet01 //名字(与上面保持一致)
/servlet01/s//url路径(可自定义设置)
文章为作者独立观点,不代表股票交易接口观点