Servlet相关知识

来源:互联网 发布:女娲成长日记网络剧 编辑:程序博客网 时间:2024/05/16 05:41
 

一、第一个Servlet的编写过程
1、建立JavaWeb应用的目录
 HelloServlet-----应用名称
  WEB-INF--------
   classes:Servlet就放在此处
   lib
   web.xml

2、在classes目录中建立Servlet类
 一个Servlet必须直接或间接地实现javax.servlet.Servlet接口
 一般我们选择继承javax.servlet.GenericServlet或者javax.servlet.http.HttpServlet类


 

3、编写Servlet类
 package com.itheima;
 import java.io.*;
 import javax.servlet.*;
 //第一个Servlet
 public class HelloServlet extends GenericServlet{

  public void service(ServletRequest req,
                              ServletResponse res)
                       throws ServletException,
                              java.io.IOException{

   //向客户端输出数据
   String data = "Hello Heima";
   OutputStream out = res.getOutputStream();
   out.write(data.getBytes());
  }

 }

4、编译Servlet类
 编译需要用到servlet-api.jar(在Tomcat的lib目录中)
 4.1设置classpath:set classpath=%classpath%;C:\apache-tomcat-6.0.32\lib\servlet-api.jar
 4.2因为带包名,进入classes目录,使用以下命令进行编译
 javac -d . HelloServlet.java

5、配置Servlet的访问路径映射

 对于JavaWeb应用的配置都在web.xml中,在web.xml中增加以下配置
     <servlet>
        <servlet-name>HelloServlet</servlet-name><!--制定一个Servlet名称-->
        <servlet-class>com.itheima.HelloServlet</servlet-class><!--制定对应的Servlet类,用类的全名-->
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/Hello</url-pattern><!--用户访问的映射路径-->
    </servlet-mapping>
6、访问
 http://localhost:8080/HelloServlet/Hello

二、Servlet规范提供了两个Servlet接口的默认实现
1、GenericServlet:通用的(默认的)的跟协议无关的实现
2、HttpServlet:跟HTTP协议有关的Servlet默认实现。我们编写的Servlet一般只需要继承该类即可
三、编写Servlet时一般需要继承HttpServlet。
1、不要覆盖service方法,默认实现中提供了一些标准的内容
2、应该覆盖掉doXXX方,因为默认实现给了一个错误的提示

四、利用MyEclipse可以直接创建Servlet。模板太烂
1、MyEclipse6.6:打开MyEclipse的安装目录,搜索Servlet.java的文件,该文件即为模板文件。
2.MyEclipse8.5:打开MyEclipse的安装目录,搜索com.genuitec.eclipse.wizards_8.5.0.me201003052220.jar。
打开其中的templates找到Servlet.java文件
3、修改Servlet.java模板文件(停掉MyEclipse,注意备份)
五、Servlet映射
可以使用通配符*
两种格式:
*.扩展名(注意*前面没有其他内容)
/abc/*(注意以*结尾,以/开头)
六、如果请求的资源在应用的web.xml中找不到对应的url-pattern映射,会交由缺省的Servlet处理。
缺省的Servlet的url-pattern的值为"/"。在Tomcat的conf/web.xml中已经配好了一个缺省的Servlet。
当请求HTML或其他静态资源时,实际上都是有缺省的Servlet进行处理的。
七、Servlet的生命周期
1、Servlet在默认情况下,第一访问时容器才会创建它的实例,并驻留内存
2、要想在容器启动时就实例化Servlet对象,可以做以下配置
<servlet>
  <servlet-name>ServletDemo1</servlet-name>
  <servlet-class>com.itheima.ServletDemo1</servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>
<load-on-startup>的取值说明了启动顺序

 八、ServletConfig对象
1、作用:获取为Servlet配置的初始化信息。
可以在web.xml的<servlet>元素中通过<init-param>为Servlet制定初始化的参数
2、ServletConfig对象在实例化Servlet对象时由容器传递给Servlet。通过ServletConfig对象的getInitParameter(String paramName)就可以获得web.xml中针对该Servlet的配置参数的值。或者使用getInitParameterNames获取所有的初始化参数
九、ServletContext对象
1、作用:JavaWeb应用的一个全局对象,一个应用只有一个ServletContext对象。在应用启动时,容器就会创建该对象
2、获得ServletContext对象的引用:
 2.1ServletConfig.getServletContext()
 2.2从HttpServlet类中继承的方法getServletContext()也可以获得
3、根据ServletContext特点,可以将该对象看做是整个web应用的总管家
4、应用
 4.1实现多个Servlet之间的数据共享
 4.2配置web应用的全局参数
 4.3实现Servlet的转发
  转发的特点:
   1、请求的地址栏的地址不变
   2、两者共享request和response对象
   3、转发前和转发后页面上的内容都不会输出
 4.4ServletContext读取资源配置文件
  1、getRealPath:获取指定相对路径资源的绝对路径。相对路径必须以"/"开头
  2、读取classes目录中的配置文件:
   a、利用ClassLoader.getResourceAsStream():不适合加载很大的配置文件
   b、利用ServletContext.getRealpath("/相对路径")
  3、读取非classes目录中的配置文件
   采用利用ServletContext.getRealpath("/相对路径")

原创粉丝点击