小白的进阶之路14

hanmengdi hanmengdi     2022-12-26     147

关键词:

---恢复内容开始---

servlet 是Javaweb的三大组件之一。

三大组件:servlet,filter,lisoner

客户端通过服务器想浏览器发出请求。

我们所写的AServlet、BServlet,都是由我们实现servlet接口的实现类。

servlet是单例的,一个类一个servlet,他们的功能是不同的。但他是线程不安全的,而且效率是高的。有可能出现一个servlet处理同时处理多个请求,所以最好不要在servlet中随便创建成员变量,有可能出现一个线程是读操作,另一个线程是写操作,这样就出现线程不安全的问题。但如果是只读,或者只写操作还可以。

servlet 类我们写(比如执行什么功能),但是对象由Tomcat创建。

servlet完成的三大块:

获取请求数据、  请求处理、完成响应。

servlet的三大生命周期方法:init(),//第一次请求servlet则创建。destroy()//Tomcat关闭则死亡。

service(),,,//可以多次调用,每次处理请求都会调用。

而这些方法都是由Tomcat调用,调用destory则servlet死亡,关闭Tomcat则死亡。

tomcat怎么访问servlet,servlet只是一个java类???

需要用xml配置文件,将servlet和URL的路径绑在一起。

技术分享图片

在xml配置中,获取初始化参数。

技术分享图片

获取初始化参数

技术分享图片

技术分享图片

需要调用service时,Tomcat将service的两个参数强转成httpservletrequest,和 httpservletresponse类型。然后通过httpservletreques得到当前的请求方式,是post还是get,如果是post,则调用doPost方法,如果是get,则调用get方法。

技术分享图片

4打头,是客户端的错误。

技术分享图片

一般情况下,servlet的创建时第一次被调用的时候,但是可以设置xml文件实现服务器开启时就创建。

技术分享图片

图中的<load-on-startup> 表示第一次开启的时候就创建的顺序。

 ServletContext==application

生命周期在服务器开启时创建,服务器关闭时死亡。

一个项目只有一个servletcontext对象。

servletconfig()。getservletContext();

正常我们创建一个servlet会继承httpservlet

public void servlet extends httpservlet()

………………

但其实,httpservlet继承了servletconfig接口。

技术分享图片

javaweb中有四大域对象,即pageContext,servletContext,servletrequest,httpsession。

域对象是什么?有什么作用?

域对象不需要创建直接在servlet区域中调用,作用是保存数据以及servlet之间的数据传递。所以域对象有两大功能,第一存数据,第二取数据。

技术分享图片

servletcontext可以设置全局的初始化参数,此初始化参数不属于任何一个servlet

下面是一个小练习:

访问量的统计。

第一次访问的时候建立一个int型的变量在servletcontext这个对象中,之后的每次访问都+1;

首先,第一次访问的时候用setattribute()这个函数来创建一个属性,

技术分享图片

将输入流转化为字符串,需要用到commons.ioUtils这个工具类。

URI=项目名+servlet路径:、/goods/AServlet

URL:不包含路径的参数的请求路径。即?之后全没有

 技术分享图片

获取请求参数,用户向服务器发出请求,如果请求参数在请求体中,则是post请求,如果是URL中,则是get请求。

技术分享图片

其中第一个和最后一个最为常用。

转发是一个请求,跨多个servlet,但是使用一个request和response域。

技术分享图片

这是转发,request.getRequestDispatcher("/TwoServlet").forword(request,reponse);

请求转发是只显示转发至的servlet响应体。

在转发中,留头不留体,比如AServlet转发至BServlet,在A中设置响应头和响应体,在B中设置响应体,那么,A中只会留头(为了证明|A参与)不会留体,只会留B中的体。、

转发地址栏不会发生变化,如果想地址栏发生变化,那么必须使用重定向。如果想在下一个servlet中获得request域中的数据,那么必须使用转发。

服务器默认编码是iso8859-1;而浏览器默认的编码是gbk;但是Tomcat8的默认编码是utf-8;

响应编码:不乱码,只需加上response.setContextType("text/thml";"charset=utf-8");

请求编码:页面是什么编码,那么获得请求参数就是什么编码。在获得请求参数之前,要加上request.setCharacterEncoding("utf-8");然后在用request.getParameter("XXX");

技术分享图片

技术分享图片

以“/”开头,则是绝对路径,绝对路径要加项目名+。。。

不以“/”开头,则是相对路径

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

小白的进阶之路1

在登陆的页面中,需要一个表单,<formaction="\goods\loginServlet" method="post">为什么要有这个servlet?答:需要将这个用户填好的表单交给其他的东西,比如服务器,或者servlet来继续处理或响应。用户名:<input type="text"nam... 查看详情

小白的进阶之路2

 今天遇到的第一个问题就是我写的jsp代码在引进css样式的时候,出现了问题,我引不进去。试了好多次,起先的代码是<link rel="stylesheet" type="text/css"src="<c:urlvalue=‘/css/register.jsp‘>">.后来将register.css移到和jsp... 查看详情

小白的进阶之路6

大概的了解了一下关于三大框架,首先说一下是什么,也就是spring,springMVC,还有mybites,另外一个三大框架就是ssh,即spring,Struts2,还有hibernate。我们都知道在做项目的时候都要分为三个模块,web层(逻辑层),service层(服务... 查看详情

小白的进阶之路7

 注解:昨天学了配置文件,感觉还不错,确实之前new的方式好了很多,今天继续学习注解。OK,开始进的入门案例第一步,配置扫描注解,注意:其中base-package 后面的参数是应new的对象所在包。第二步,在需要注解的实... 查看详情

小白的进阶之路12

---恢复内容开始--- 昨天上午弄了一个简单的页面,就是关于客户管理系统,想着实现保存功能,可是问题卡在页面跳转上,从输入信息页面就是跳不到saveservlet,将用户属兔的信息用表单传给servlet,然后servlet读取后,用map... 查看详情

小白的进阶之路16

cookie:是服务器产生保存到浏览器,是http协议制定的,下一次浏览器在请求服务器时,浏览器将上一次访问产生的cookie在还给服务器。cookie是一个键值对,服务器保存cookie的响应头。cookie不能跨浏览器。cookie的属性:name:value... 查看详情

小白进阶之路-滑雪-暑假训练(代码片段)

 搜索依然爆炸的烂,继续加油吧。 题解:按照h排序的大根堆,每次寻找四周h小的接上dp串。#include<iostream>#include<queue>#include<algorithm>usingnamespacestd;/**time:2020.7.23*thinking:从h大的向h小的寻找,接上上一个的最... 查看详情

小白的进阶之路13

 昨天说到了级联保存,那么什么是级联保存。我们都知道,双向保存就是customer和linkman都要保存,那么单项保存呢?单向保存就是只保存一方,而不需要保存另一方,但是这样会出异常,这是就需要级联保存只需要保存custom... 查看详情

小白进阶之路-hdu-2594(代码片段)

题意:给你两个字符串s1,s2,让你寻找最长s1前缀和s2后缀的匹配长度,若长度大于0,且输出最长匹配s1前缀。 #include<cstdio>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;constintmaxn=1e5+100;intnxt[m 查看详情

小白进阶之路-cf.edu-91-b(代码片段)

题意:一段只包含‘R,S,P‘的字符串,希望你输出一段字符串使得无论起始位置pos在哪,你胜率最大的组合。错误思路:分字符种类情况分析。(错误原因,只是找到单次比较最大值,但不是全局比较最大值)正确思路:分字符... 查看详情

数据分析师教程_从小白到“数据分析师”大神进阶之路

...途无忧网:http://www.xuetuwuyou.com课程特色——成长六部曲小白脱白篇—>数据分析篇—>数据挖掘篇—>Python加薪冲刺篇—>大数据分析师进阶篇——>精英项目实战篇一、课程目标数据分析师秉承着总结凝练最先进的商业数... 查看详情

厚着脸皮求领导写了一篇java小白进阶大牛之路!!!

缘起&应朋友之邀 2019年已经过去两个月了,应朋友之邀,写写自己的个人经历,与其说经历还不如是自我的总结与反思。2012年2月份只身一人拖着行李箱来到北京库巴科技有限公司实习,那时候库巴处在高速发展的阶段,... 查看详情

javascript进阶之路1

...了头依然不见大明湖畔的夏雨荷。当年我还是个javascript小白,项目经理分下来一个验证表单功能的任务,内容不多,仅需要验证用户名、邮箱、密码等。我一看soeasy,于是便写下几个函数。1functioncheckName(){2//验证姓名3}45functionch... 查看详情

小白进阶之路-xorto-暴力枚举优化(代码片段)

  题目链接:https://ac.nowcoder.com/acm/problem/14247 思想:暴力枚举两个区间的左右端点时间复杂度很高,可如果枚举一个区间,问题会简化。     维护到i处的异或和(pre[i],类似于桶排序中的桶,所以num... 查看详情

小白进阶之路-codeforces-616d(代码片段)

链接:https://codeforces.ml/problemset/problem/616/D题意:寻找最长字串,使得子串中不同数字的个数不超过K。 Solution:尺取法,用数组vis[]存储当前字串各数字个数,num用来存储当前字串中不同数字个数,外层循环保证右边界到达n... 查看详情

selenium之webdriver详解——小白进阶之路(二)

参考技术A笔记:01.设置元素等待时间自动化测试的时候,元素定位没有错,但是跑脚本的时候却报错了例如,登录的时候要等登录页面加载出来才能输入用户名和密码selenium设置元素等待时间的3种方式及区别1.sleep()--固定等待时... 查看详情

小白进阶之路-fzu-1695-dp(代码片段)

题目:  简单错误思路:  dfs:每个状态都需要遍历,所以最坏2^50,TLE  类似于01滚动:考虑到空间存不下就没有实际行动,大概率MLE 正确答案:  类似于第二种状态,不过是状态压缩,原地滚动,每一步都利... 查看详情

小白进阶之路-fzu-1695-dp(代码片段)

题目:  简单错误思路:  dfs:每个状态都需要遍历,所以最坏2^50,TLE  类似于01滚动:考虑到空间存不下就没有实际行动,大概率MLE 正确答案:  类似于第二种状态,不过是状态压缩,原地滚动,每一步都利... 查看详情