关于Servlet那些你不得不知道的知识点

it2023-08-16  68

Servlet

看这篇文章之前,请先看我的上一篇博客https://blog.csdn.net/aljp123/article/details/109111619,因为我们将接着上一篇博客留下的疑问开始我们的学习之旅,如果准备好了,我们就开始去往Servlet海洋里遨游吧。

注解、Web.xml

我们通过上一篇博客已经对Servlet有了大致的了解,知道它的作用以及如何操作。可是有个问题值得深思,那就是我们的页面怎么发现我们的Servlet。通过什么方式找到它呢?我们知道有AJAX对吧,我们表单标签也可以,因为它们都有一个地址属性。问题来了,地址填什么,我们不可能填类名对吧,那么还能填什么呢?还是填地址,可是Servlet没有填地址的地方啊,那这个万分危急的时刻该怎么办呢?

没办法了,是时候把我们的web.xml请出来了。如果对xml文件还不了解的,可以去看我之前的博客。https://blog.csdn.net/aljp123/article/details/108298596。web.xml是配置文件,它有映射的功能,我们要填的Servlet地址可以填在这里,这样就实现了Servlet与页面界面的映射关系。大致流程如下:

#mermaid-svg-JUuEOeHNn1oNKaiP .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .label text{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .node rect,#mermaid-svg-JUuEOeHNn1oNKaiP .node circle,#mermaid-svg-JUuEOeHNn1oNKaiP .node ellipse,#mermaid-svg-JUuEOeHNn1oNKaiP .node polygon,#mermaid-svg-JUuEOeHNn1oNKaiP .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-JUuEOeHNn1oNKaiP .node .label{text-align:center;fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .node.clickable{cursor:pointer}#mermaid-svg-JUuEOeHNn1oNKaiP .arrowheadPath{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-JUuEOeHNn1oNKaiP .flowchart-link{stroke:#333;fill:none}#mermaid-svg-JUuEOeHNn1oNKaiP .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-JUuEOeHNn1oNKaiP .edgeLabel rect{opacity:0.9}#mermaid-svg-JUuEOeHNn1oNKaiP .edgeLabel span{color:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-JUuEOeHNn1oNKaiP .cluster text{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-JUuEOeHNn1oNKaiP .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-JUuEOeHNn1oNKaiP text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-JUuEOeHNn1oNKaiP .actor-line{stroke:grey}#mermaid-svg-JUuEOeHNn1oNKaiP .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-JUuEOeHNn1oNKaiP #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .sequenceNumber{fill:#fff}#mermaid-svg-JUuEOeHNn1oNKaiP #sequencenumber{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP #crosshead path{fill:#333;stroke:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .messageText{fill:#333;stroke:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-JUuEOeHNn1oNKaiP .labelText,#mermaid-svg-JUuEOeHNn1oNKaiP .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-JUuEOeHNn1oNKaiP .loopText,#mermaid-svg-JUuEOeHNn1oNKaiP .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-JUuEOeHNn1oNKaiP .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-JUuEOeHNn1oNKaiP .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-JUuEOeHNn1oNKaiP .noteText,#mermaid-svg-JUuEOeHNn1oNKaiP .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-JUuEOeHNn1oNKaiP .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-JUuEOeHNn1oNKaiP .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-JUuEOeHNn1oNKaiP .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-JUuEOeHNn1oNKaiP .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .section{stroke:none;opacity:0.2}#mermaid-svg-JUuEOeHNn1oNKaiP .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-JUuEOeHNn1oNKaiP .section2{fill:#fff400}#mermaid-svg-JUuEOeHNn1oNKaiP .section1,#mermaid-svg-JUuEOeHNn1oNKaiP .section3{fill:#fff;opacity:0.2}#mermaid-svg-JUuEOeHNn1oNKaiP .sectionTitle0{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .sectionTitle1{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .sectionTitle2{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .sectionTitle3{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-JUuEOeHNn1oNKaiP .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .grid path{stroke-width:0}#mermaid-svg-JUuEOeHNn1oNKaiP .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-JUuEOeHNn1oNKaiP .task{stroke-width:2}#mermaid-svg-JUuEOeHNn1oNKaiP .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .taskText:not([font-size]){font-size:11px}#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-JUuEOeHNn1oNKaiP .task.clickable{cursor:pointer}#mermaid-svg-JUuEOeHNn1oNKaiP .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-JUuEOeHNn1oNKaiP .taskText0,#mermaid-svg-JUuEOeHNn1oNKaiP .taskText1,#mermaid-svg-JUuEOeHNn1oNKaiP .taskText2,#mermaid-svg-JUuEOeHNn1oNKaiP .taskText3{fill:#fff}#mermaid-svg-JUuEOeHNn1oNKaiP .task0,#mermaid-svg-JUuEOeHNn1oNKaiP .task1,#mermaid-svg-JUuEOeHNn1oNKaiP .task2,#mermaid-svg-JUuEOeHNn1oNKaiP .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutside0,#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutside2{fill:#000}#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutside1,#mermaid-svg-JUuEOeHNn1oNKaiP .taskTextOutside3{fill:#000}#mermaid-svg-JUuEOeHNn1oNKaiP .active0,#mermaid-svg-JUuEOeHNn1oNKaiP .active1,#mermaid-svg-JUuEOeHNn1oNKaiP .active2,#mermaid-svg-JUuEOeHNn1oNKaiP .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-JUuEOeHNn1oNKaiP .activeText0,#mermaid-svg-JUuEOeHNn1oNKaiP .activeText1,#mermaid-svg-JUuEOeHNn1oNKaiP .activeText2,#mermaid-svg-JUuEOeHNn1oNKaiP .activeText3{fill:#000 !important}#mermaid-svg-JUuEOeHNn1oNKaiP .done0,#mermaid-svg-JUuEOeHNn1oNKaiP .done1,#mermaid-svg-JUuEOeHNn1oNKaiP .done2,#mermaid-svg-JUuEOeHNn1oNKaiP .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-JUuEOeHNn1oNKaiP .doneText0,#mermaid-svg-JUuEOeHNn1oNKaiP .doneText1,#mermaid-svg-JUuEOeHNn1oNKaiP .doneText2,#mermaid-svg-JUuEOeHNn1oNKaiP .doneText3{fill:#000 !important}#mermaid-svg-JUuEOeHNn1oNKaiP .crit0,#mermaid-svg-JUuEOeHNn1oNKaiP .crit1,#mermaid-svg-JUuEOeHNn1oNKaiP .crit2,#mermaid-svg-JUuEOeHNn1oNKaiP .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-JUuEOeHNn1oNKaiP .activeCrit0,#mermaid-svg-JUuEOeHNn1oNKaiP .activeCrit1,#mermaid-svg-JUuEOeHNn1oNKaiP .activeCrit2,#mermaid-svg-JUuEOeHNn1oNKaiP .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-JUuEOeHNn1oNKaiP .doneCrit0,#mermaid-svg-JUuEOeHNn1oNKaiP .doneCrit1,#mermaid-svg-JUuEOeHNn1oNKaiP .doneCrit2,#mermaid-svg-JUuEOeHNn1oNKaiP .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-JUuEOeHNn1oNKaiP .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-JUuEOeHNn1oNKaiP .milestoneText{font-style:italic}#mermaid-svg-JUuEOeHNn1oNKaiP .doneCritText0,#mermaid-svg-JUuEOeHNn1oNKaiP .doneCritText1,#mermaid-svg-JUuEOeHNn1oNKaiP .doneCritText2,#mermaid-svg-JUuEOeHNn1oNKaiP .doneCritText3{fill:#000 !important}#mermaid-svg-JUuEOeHNn1oNKaiP .activeCritText0,#mermaid-svg-JUuEOeHNn1oNKaiP .activeCritText1,#mermaid-svg-JUuEOeHNn1oNKaiP .activeCritText2,#mermaid-svg-JUuEOeHNn1oNKaiP .activeCritText3{fill:#000 !important}#mermaid-svg-JUuEOeHNn1oNKaiP .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-JUuEOeHNn1oNKaiP g.classGroup text .title{font-weight:bolder}#mermaid-svg-JUuEOeHNn1oNKaiP g.clickable{cursor:pointer}#mermaid-svg-JUuEOeHNn1oNKaiP g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-JUuEOeHNn1oNKaiP g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-JUuEOeHNn1oNKaiP .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-JUuEOeHNn1oNKaiP .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-JUuEOeHNn1oNKaiP .dashed-line{stroke-dasharray:3}#mermaid-svg-JUuEOeHNn1oNKaiP #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP .commit-id,#mermaid-svg-JUuEOeHNn1oNKaiP .commit-msg,#mermaid-svg-JUuEOeHNn1oNKaiP .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-JUuEOeHNn1oNKaiP g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-JUuEOeHNn1oNKaiP g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-JUuEOeHNn1oNKaiP g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-JUuEOeHNn1oNKaiP .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-JUuEOeHNn1oNKaiP .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-JUuEOeHNn1oNKaiP .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-JUuEOeHNn1oNKaiP .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-JUuEOeHNn1oNKaiP .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-JUuEOeHNn1oNKaiP .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-JUuEOeHNn1oNKaiP .edgeLabel text{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-JUuEOeHNn1oNKaiP .node circle.state-start{fill:black;stroke:black}#mermaid-svg-JUuEOeHNn1oNKaiP .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-JUuEOeHNn1oNKaiP #statediagram-barbEnd{fill:#9370db}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-state .divider{stroke:#9370db}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-JUuEOeHNn1oNKaiP .note-edge{stroke-dasharray:5}#mermaid-svg-JUuEOeHNn1oNKaiP .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-JUuEOeHNn1oNKaiP .error-icon{fill:#522}#mermaid-svg-JUuEOeHNn1oNKaiP .error-text{fill:#522;stroke:#522}#mermaid-svg-JUuEOeHNn1oNKaiP .edge-thickness-normal{stroke-width:2px}#mermaid-svg-JUuEOeHNn1oNKaiP .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-JUuEOeHNn1oNKaiP .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-JUuEOeHNn1oNKaiP .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-JUuEOeHNn1oNKaiP .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-JUuEOeHNn1oNKaiP .marker{fill:#333}#mermaid-svg-JUuEOeHNn1oNKaiP .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-JUuEOeHNn1oNKaiP { color: rgba(0, 0, 0, 0.75); font: ; } 请求 映射 页面 服务器 web.xml Servlet

怎么样,web.xml很重要吧,好了,我想我们现在该关心的问题是怎么填Servlet地址。我现在把代码提供出来,供大家参考:

<servlet> <servlet-name>login</servlet-name> <servlet-class>com.liuxie.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>

看标签名我们也大致能猜出写什么?name是填这个映射地址的名称,名称是可以随便填的,不过最好是见名知意一点。我们的class标签,是填我们的Servlet类的地址。然后再看映射标签<servlet-mapping>,记得一定要有/,这个代表我们的根目录,/*就代表根目录下的所有文件。就是说只要是这当前根目录下的页面访问的任何地址,只要是访问Servlet,都是可以请求这个类名是LoginServlet的Servlet。

我给的只是Web.xml的servlet配置的示例而已。/的后面是填*还是填其他的名称都是根据请求地址的名称而定。或者没有/也是可行的。用后缀为标识也可以。

除了web.xml,我们也可以用其他方式。比如注解。说到注解可能大家还不太懂。但是我们一定知道注释,注释是用来解释代码的,是给程序员看的。那注解呢?我们可以理解为是给程序看的。比如我们之前学继承的时候,子类继承父类,我们通常都要重写父类的方法对吧。那我们有没有发现,在方法上有@Override这个标识。这个标识就是注解,当我们方法上有这个注解,我们的这个子类才知道这个方法是重写父类的方法。好了,说到这里,我们就明白了。

那我们的映射Servlet的注解该怎么写?用@WebServlet()注解。要写在类的上面。关于@WebServlet的常用属性,我做个表格出来,供大家更好的参考:

属性说明asyncSupported (boolean)指定Servlet是否支持异步操作模式displayName (String)指定Servlet显示名称initParams (webInitParam[])配置初始化参数loadOnStartup(int)标记容器是否在应用启动时就加载这个Servlet,等价于配置文件中的标签name(String)指定Servlet名称urlPatterns/value(String[])这两个属性作用相同,指定Servlet处理的url

这些属性没必要全都要用,根据你自己的需求或情况而用。我觉得能经常用到的可能就是value属性了吧。

再回到我们的JavaWeb

Servlet只是我们的JavaWeb的一个小知识点,但很关键,所以我特地为它写了一篇博客。好了,Servlet就讲到这儿,现在我们从servlet开始跳脱出来,去看我们的JavaWeb。现在我们知道了如何用Java来写动态页面,但是我们还会有困惑,Java它是可以帮我们完成一些数据的逻辑存取。可是数据呢?数据在哪存?又在哪取?是不是有人想到了文件,然后又想到了集合。能想这一步很不错,关于文件和集合的使用可以看我这一篇博客:https://blog.csdn.net/aljp123/article/details/108179456。 可是文件的话,是不可取的,因为它存放的数据杂乱无章。这个时候,我们的数据库重头大戏将要上映,下一篇博客请期待…

祝各位程序员节日快乐

最新回复(0)