(No.32)

系统 2233 0

一:Servlet的一些细节:

1、由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工作在 web.xml 文件中使用 <servlet> 元素和 <servlet-mapping> 元素完成。

<servlet> 元素用于注册 Servlet ,它包含有两个主要的子元素: <servlet-name> <servlet-class> ,分别用于设置 Servlet 的注册名称和 Servlet 的完整类名。

一个 <servlet-mapping> 元素用于映射一个已注册的 Servlet 的一个对外访问路径,它包含有两个子元素: <servlet-name> <url-pattern> ,分别用于指定 Servlet 的注册名称和 Servlet 的对外访问路径。

例如:

(No.32)

2、同一个 Servlet 可以被映射到多个 URL 上,即多个 <servlet-mapping> 元素的 <servlet-name> 子元素的设置值可以是同一个 Servlet 的注册名。

Servlet 映射到的 URL 中也可以使用 * 通配符,但是只能有两种固定的格式:一种格式是“ *. 扩展名”,另一种格式是以正斜杠( / )开头并以“ /* ”结尾。

例如:

(No.32)

3 Servlet1 映射到 /abc/*

Servlet2 映射到 /*

Servlet3 映射到 /abc

Servlet4 映射到 *.do

其中 URL 请求与哪个最相像,就归为哪一类,强调: /* *.do 优先级高

4 、针对客户端的多次 Servlet 请求,通常情况下,服务器只会创建一个 Servlet 实例对象,也就是说 Servlet 实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至 web 容器退出, servlet 实例对象才会销毁。

Servlet 的整个生命周期内, Servlet init 方法只被调用一次。而对一个 Servlet 的每次访问请求都导致 Servlet 引擎调用一次 servlet service 方法。对于每次访问请求, Servlet 引擎都会创建一个新的 HttpServletRequest 请求对象和一个新的 HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet service() 方法, service 方法再根据请求方式分别调用 doXXX 方法。

例子代码:

(No.32)

5 、在 <servlet> 元素中配置了一个 <load-on-startup> 元素,那么 WEB 应用程序在启动时,就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init() 方法。

例子:

5、缺省 Servlet

6、线程安全:

例子代码:

(No.32)

二、ServletConfig对象

Servlet 的配置文件中,可以使用一个或多个 <init-param> 标签为 servlet 配置一些初始化参数

(No.32)

servlet 配置了初始化参数后, web 容器在创建 servlet 实例对象时,会自动将这些初始化参数封装到 ServletConfig 对象中,并在调用 servlet init 方法时,将 ServletConfig 对象传递给 servlet 。进而,程序员通过 ServletConfig 对象就可以得到当前 servlet 的初始化参数信息

例子:

packagecn.csdn.web.servlet;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.Enumeration;

importjavax.servlet.ServletConfig;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassDemoServletextendsHttpServlet{

intx=1;

@Override

publicvoiddestroy(){

//TODOAuto-generatedmethodstub

super.destroy();

System.out.println("销毁");

}

publicDemoServlet(){

super();

System.out.println("创建对象");

}

@Override

publicvoidinit()throwsServletException{

//TODOAuto-generatedmethodstub

super.init();

System.out.println("---------初始化------------");

}

@Override

publicvoidinit(ServletConfigconfig)throwsServletException{

super.init(config);

System.out.println("================"+config);

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

this.doPost(request,response);

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

/*设置编码*/

request.setCharacterEncoding("UTF-8");

Stringversion=this.getServletConfig().getInitParameter("version");

StringcharacterEncoding=this.getServletConfig().getInitParameter("characterEncoding");

request.setCharacterEncoding(characterEncoding);

/*获取一下PrintWriter对象*/

PrintWriterout=response.getWriter();

out.print("=-"+version);

Enumeration<String>enumer=this.getServletConfig().getInitParameterNames();

/*遍历*/

while(enumer.hasMoreElements()){

Stringname=enumer.nextElement();

Stringvalue=this.getServletConfig().getInitParameter(name);

System.out.println(name+"===="+value);

}

}

}

三、ServletContext应用

----》在MyEclipse中的开发

---->首先建立

--->Demo01Servlet.java中写入:

packagecn.csdn.web.servlet;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletContext;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassDemo01ServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

this.doPost(request,response);

}

@Override

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

request.setCharacterEncoding("UTF-8");

/* 怎么样获取 ServletContext 对象 */

ServletContextcontext=this.getServletConfig().getServletContext();

context=this.getServletContext();

context.setAttribute("date","ddd");

response.sendRedirect("./data.html");

}

}

--->Demo02Servlet.java中写入:

packagecn.csdn.web.servlet;

importjava.io.IOException;

importjavax.servlet.ServletContext;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassDemo02ServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

this.doPost(req,resp);

}

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)

throwsServletException,IOException{

/* 怎么获取共享数据 */

ServletContextcontext=this.getServletContext();

Stringdata=(String)context.getAttribute("data");

resp.getWriter().write(data);

}

}

--->在web.xml中写入:

<servlet>

<servlet-name>Demo01Servlet</servlet-name>

<servlet-class>cn.csdn.web.servlet.Demo01Servlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Demo01Servlet</servlet-name>

<url-pattern>/demo01</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>Demo02Servlet</servlet-name>

<servlet-class>cn.csdn.web.servlet.Demo02Servlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Demo02Servlet</servlet-name>

<url-pattern>/demo02</url-pattern>

</servlet-mapping>

----->建立一个data.html:添加

<body>

<div>

<ahref="./demo02">查看共享数据</a>

</div>

</body>

---->ok

(No.32)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论