javaweb学习总结——Servlet学习笔记(17.09.13)

servlet 简介

1.servlet叫什么

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互地浏览和修改数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet值用来扩展基于HTTP协议的WEB服务器。

2.servlet是什么

java Servlet 是运行在web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。

3.Servlet架构

下图显示了 Servlet 在 Web 应用程序中的位置。

4.Servlet包

Java Servlet 是运行在带有支持Java Servlet 规范的解释器的web服务器上的Java类

5.Servlet生命周期

init()->service(){doget()  dopost() 等}->   destroy()

如果有service()被重写则就不会调用 doget()/dopost()

浏览器关闭不会调用destroy(),这有服务器关闭才会关闭destroy()

6.中文乱码问题

注意:如果表单提交的数据中有中文数据则需要转码:

String name=newString(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

7.Servlet异常处理

当一个 Servlet 抛出一个异常时,Web 容器在使用了 exception-type 元素的web.xml中搜索与抛出异常类型相匹配的配置。

您必须在 web.xml 中使用error-page元素来指定对特定异常或 HTTP状态码作出相应的 Servlet 调用。


8.<load-on-startup> ? </load-on-startup>

只要不为0或者不为空,就是表示启动的时候执行



9.乱码问题

首先为什么会出现乱码呢?

解决get乱码问题。。因为,我们在提交数据的时候是UTF-8类型的数据 而是通过数据流的形式到doget,那么数据流tomcat设置的是ISO-8859-1   的字符形式。所以自然就出现乱码现象。那么怎么解决呢?首先到tomcat的server.xml中<Connector>中设置 URIEncoding="UTF-8"。就可以解决get请求的方法。但post的请求改变不了。

解决post乱码问题。在dopost中加一个 request.setCharacterEncoding("UTF-8");。

以后编程的时候都是用过滤器来解决乱码问题。



问题笔记

1.如果没设置web.xml内容可以,web项目可以打开吗?

可以,但必须要头标签,因为创建web.xml必须有xml标记头,要不然找不到默认的启动网页。

参考网页(http://www.cnblogs.com/hxsyl/p/3435412.html)

2.如果没创建web.xml,web可以运行吗?为什么?

可以。因为对于tomcat来说,当你只指定一个web的根名,没有指定具体页面,去访问时一个web时,如果web.xml文件中配置了欢迎页,那么就返回指定的那个页面作为欢迎页,而在文中没有web.xml文件,或虽然有web.xml,但web.xml也没指定欢迎页的情况下,它默认先查找index.html文件,如果找到了,就把index.html作为欢迎页还回给浏览器。如果没找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作为欢迎页面返回。而如果index.html和index.jsp都没找到,又没有用web.xml文件指定欢迎页面,那此时tomcat就不知道该返回哪个文件了,它就显示The requested resource (/XXX) is not available(我就出现过这个问题)的页面。其中XXX表示web的根名。但如果你指定了具体页面,是可以正常访问的。

参考网页(http://www.cnblogs.com/hxsyl/p/3435412.html)

3.web.xml 配置文件的加载顺序是什么?

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资 料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只 是略加点了自己的修饰。 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会 因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter -> servlet  。如果某个会话在一定时间内未被访问,服务器可 以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对 象的超时值,或者可利用session-config元素制定缺省超时值。

参考网页(http://www.cnblogs.com/hxsyl/p/3435412.html)

4.请求servlet容器时候,servlet   servlet-mapping 的顺序?

摘录某个工程的 web.xml 文件片段:

访问顺序为1—>2—>3—>4,其中2和3的值必须相同。

url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两个 servlet-name 标签的值必须相同,因为通过 servlet 标签中的 servlet-name 标签映射到 servlet-class 标签中的值,最终访问 servlet-class 标签中的 class。

还有,web.xml   的 / 表示的是http://localhost:8080/ + 工程名

而.jsp页面的action,加了/表示绝对路径http://localhost:8080/ ,没有加

/ 表示的是相对路径


5.url-pattern 的匹配顺序规则?

1.  写法

①完全匹配:以“/”开头,以字母(非“*”)结束

如:/test/list.do

②目录匹配:以“/”开头且以“/*”结尾

如:/test/*

/*

③扩展名匹配:以“*.”开头,以扩展名结束

如:*.do

④ “/” 用来表明对应的Servlet为应用默认的Servlet。在这种情况下Servlet路径是请求的URI去掉上下文路径并且路径信息为null。

2.  匹配过程

当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:

1.     精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。

2.     最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。

3.     扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action

4.如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源(问题7)。如果应用定义了一个default servlet,则容器会将请求丢给default servlet


=================================================

参考网页(http://tianya23.blog.51cto.com/1081650/1001568)

6.请求给Servlet没有匹配到,运行机制是什么样的。

有两种方式声明servlet的方式

一。


二。

7.filter过滤的顺序是怎么决定?

由  filter-mapping 元素的顺序决定了 Web 容器应用过滤器到 Servlet 的顺序 。切记配置文件重写是,需要重新启动项目才能使用。

8.下图为什么不能创建HelloWorld? 

因为配置过的他创建的时候eclipse会去检测,检测到已经存在同名的servlet了当然不给你创建。

9.如果只写配置文件则会报错吗?

会的。报404错误。

10.Eclipse新建Servlet时候,不会自动生成mapping到web.xml,而是在代码中加入注解@WebServlet

参考文章(http://blog.csdn.net/xulianboblog/article/details/51079534)

因为查找文档发现,这是Servlet3.0新特性(得Tomcat7.0版本及以上),@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 value 或者 urlPatterns 通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容