一、第一个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(“/相对路径”)
解析路径
请求转发的过程
得到WEB-INF下的配置文件
相对路径和绝对路径
压缩数据
下载图片
解决线程并发问题