`
emowuyi
  • 浏览: 1480140 次
文章分类
社区版块
存档分类
最新评论

(No.32)

 
阅读更多

一: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的对外访问路径。

例如:

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

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

例如:

3Servlet1映射到/abc/*

Servlet2映射到/*

Servlet3映射到/abc

Servlet4映射到*.do

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

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

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

例子代码:

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

例子:

5、缺省Servlet

6、线程安全:

例子代码:

二、ServletConfig对象

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

servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servletinit方法时,将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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics