首页 / SERVLET / Servlet里的学问(一)
Servlet里的学问(一)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Servlet里的学问(一),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7872字,纯文字阅读大概需要12分钟。
内容图文
Servlet : Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
它是和平台无关的服务器端组件,运行在servlet容器中,用来处理用户的请求与服务器的交互,通过调用servlet的方法,来实现用户的请求,大体模式如下图所示:
一、servlet的生命周期
那么废话不多说,我们先来创建一个servlet,在eclipse中创建web应用就不提了,这里我们建立一个java类来实现servlet接口,最本质的servlet
1 package com.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.Servlet; 6 import javax.servlet.ServletConfig; 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.ServletResponse; 10 11 public class HelloServlet implements Servlet{ 1213 @Override 14publicvoid destroy() { 15// TODO Auto-generated method stub16 System.out.println("服务器关闭了???"); 17 System.out.println("我被销毁了。。。。"); 18 } 1920 @Override 21public ServletConfig getServletConfig() { 22// TODO Auto-generated method stub23returnnull; 24 } 2526 @Override 27public String getServletInfo() { 28// TODO Auto-generated method stub29returnnull; 30 } 3132 @Override 33//servlet初始化34publicvoid init(ServletConfig arg0) throws ServletException { 35 System.out.println("在这里初始化...."); 3637 } 3839 @Override 40//每执行一次请求都会调用这个方法41publicvoid service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 42// TODO Auto-generated method stub43 System.out.println("只要向浏览器发送请求就会调用我...."); 44 } 4546 }
在相应的web.xml中配置当前servlet信息
1 <? xml version="1.0" encoding="UTF-8" ?> 2 < web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns ="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation ="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id ="WebApp_ID" version ="3.1" > 3 < display-name >webdemo01</display-name> 4<!-- 配置servlet信息 --> 5<servlet> 6<servlet-name>helloServlet</servlet-name> 7<servlet-class>com.servlet.HelloServlet</servlet-class> 8</servlet> 9<!-- 配置访问信息 -->10<servlet-mapping>11<servlet-name>helloServlet</servlet-name>12<url-pattern>/huha</url-pattern>13</servlet-mapping>14</web-app>
OK,接下来我们就启动tomcat服务器看看servlet的整个运行
我们在浏览器里输入请求地址,huha就是<url-pattern>/huha</url-pattern>的内容,然后我们看servlet方法调用的情况,看控制台:
可以看到,第一次请求时先是调用了init()方法,其实在调用init()之前应该最先被调用的是默认的构造方法,因为毕竟servlet要被创建嘛
然后会调用service()方法,而且每请求一次,就会调用一次。不断的刷新页面,就可以看到下图的效果。
接下来就关闭服务器,看看会怎样,不过这里有一个很蛋疼的问题,就是直接在eclipse里关闭服务器,并不会显示调用destory()方法,我是通过如下方式关闭才验证的,shutdown命令执行完成以后,控制台就会输出如下:
整个上面就验证了servlet的完整的生命周期,创建之后第一次请求时即被初始化,请求就会不断执行service(),关闭服务器就会被destory掉。
二、我们看看init()的时候都会有哪些操作?
(1)获取当前servlet里的初始化参数以及对应的值,首先要做的就是在web.xml里配置当前servlet方法时,就要配置初始化参数。如下所示:
1 < servlet > 2 < servlet-name >helloServlet</servlet-name> 3<servlet-class>com.servlet.HelloServlet</servlet-class> 4<!-- 配置servlet的初始化参数 --> 5<init-param> 6<param-name>username</param-name> 7<param-value>yao</param-value> 8</init-param> 9<init-param>10<param-name>pwd</param-name>11<param-value>123456</param-value>12</init-param>1314</servlet>15<servlet-mapping>16<servlet-name>helloServlet</servlet-name>17<url-pattern>/huha</url-pattern>18</servlet-mapping>
获取初始化参数的代码如下所示:
1 public void init(ServletConfig servletConfig) throws ServletException { 2 System.out.println("在这里初始化...."); 3// 获取当前servlet的初始化参数,方法一 4 String username = servletConfig.getInitParameter("username"); 5 System.out.println("username:" + username); 6 String password = servletConfig.getInitParameter("pwd"); 7 System.out.println("password:" + password); 8 // 接下来是方法二,使用枚举
Enumeration<String> params = servletConfig.getInitParameterNames();
while (params.hasMoreElements()) {
String name = (String) params.nextElement();
String value = servletConfig.getInitParameter(name);
System.out.println("-->" + name + ":" + value); 9 System.out.println("=====================");
10 } 11
结果如下图所示:
(2)获取servletContext对象,这个很重要,而且使用servletContext的时候要多于servletConfig,所以看看init()的时候还可以干些什么事;servletContext对象,它是整个web应用程序的“大管家”。
每个应用都会有一个ServletContext对象与之关联,当容器分布在在多个虚拟机上时,web应用在所分布的每个虚拟机上都拥有一个ServletContext实例.缺省情况下,ServletContext不是分布式的,并且只存在于一个虚拟机上
首先它可以获取多个servlet公用的初始化参数,比如说配置的数据库连接信息啊这些,如下所示:
1 <? xml version="1.0" encoding="UTF-8" ?> 2 < web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xmlns ="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation ="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id ="WebApp_ID" version ="3.1" > 3 < display-name >webdemo01</display-name> 4<!-- 配置整个web应用,多个servlet公用的初始化参数 --> 5<context-param> 6<param-name>driver</param-name> 7<param-value>com.mysql.jdbc.Driver</param-value> 8</context-param> 9<context-param>10<param-name>jdbcUrl</param-name>11<param-value>jdbc:mysql://localhost:3306/db20180129</param-value>12</context-param>13<context-param>14<param-name>user</param-name>15<param-value>root</param-value>16</context-param>17<context-param>18<param-name>password</param-name>19<param-value>root</param-value>20</context-param>2122<servlet>23<servlet-name>helloServlet</servlet-name>24<servlet-class>com.servlet.HelloServlet</servlet-class>25<!-- 配置servlet的初始化参数 -->26<init-param>27<param-name>username</param-name>28<param-value>yao</param-value>29</init-param>30<init-param>31<param-name>pwd</param-name>32<param-value>123456</param-value>33</init-param>3435</servlet>36<servlet-mapping>37<servlet-name>helloServlet</servlet-name>38<url-pattern>/huha</url-pattern>39</servlet-mapping>40</web-app>
使用servletContext对象获取初始化参数的程序如下所示:其实也是有两种方法,单独获取或者通过枚举,这里只给出比较简单的一种吧
ServletContext servletContext = servletConfig.getServletContext(); String driver = servletContext.getInitParameter("driver"); String url = servletContext.getInitParameter("jdbcUrl"); String user = servletContext.getInitParameter("user"); String pwd = servletContext.getInitParameter("password"); System.out.println("初始化参数,driver:" + driver + ",url:" + url + ",user:" + user + ",password:" + pwd); System.out.println("====================="); 这个也是在init()方法中执行的
运行结果如下图所示:
(3)servletContext对象可以获取某一个文件在服务器上的路径,比如我们在 WebContent下新建一个文件,a.txt
1 // 获取文件在服务器上绝对路径,而不是发布前的文件在磁盘上的物理路径 2 String path = servletContext.getRealPath("/a.txt"); 3 System.out.println("路径:" + path);
运行结果如下图:
三、另外的一些东西,怕以后忘了
(1)配置servlet 时,会有<load-on-startup>3</load-on-startup>这样一个配置
说明: init()方法一般在第一次请求时会被调用,但是加了load-up,启动服务就会调用init()方法
load-on-startup的参数值若为负数,则在第一次请求时被创建,并直接调用init()方法;若为正数,值越小 就越先被启动
(2)同一个servlet可以被多次映射,即<servlet-mapping>可以配置多个,以处理不同的访问需求,例如下面的例子:
1 <!-- 同一个servlet可以被多次映射 --> 2 < servlet > 3 < servlet-name >HelloServlet</servlet-name> 4<servlet-class>com.demo.servlet.HelloServlet</servlet-class> 5<!-- 配置初始化参数 --> 6<init-param> 7<param-name>user</param-name> 8<param-value>root</param-value> 9</init-param>1011<init-param>12<param-name>password</param-name>13<param-value>1235</param-value>14</init-param>15<load-on-startup>1</load-on-startup>16</servlet>17<servlet-mapping>18<servlet-name>HelloServlet</servlet-name>19<url-pattern>/hey</url-pattern>20</servlet-mapping>21<!-- ===========所有请求为html后缀的都由HelloServlet来处理 -->22<servlet-mapping>23<servlet-name>HelloServlet</servlet-name>24<url-pattern>*.html</url-pattern>25</servlet-mapping>
原文:https://www.cnblogs.com/yaoruozi/p/8728212.html
内容总结
以上是互联网集市为您收集整理的Servlet里的学问(一)全部内容,希望文章能够帮你解决Servlet里的学问(一)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。