什么是Servlet?
Servlet就是一个Java类,它运行在服务器端,用以处理客户端的请求。Servlet就是一个继承HttpServlet的类。Servlet容器的主要任务是负责管理Servlet的生命周期,最典型的是tomcat。
部署并启动 tomcat 服务器.
1). 解压 apache-tomcat-6.0.16.zip 到一个非中文目录下
2). 配置一个环境变量. java_home(指向 JDK 安装的根目录) 或 jre_home
3). 通过双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat, 启动服务器
4). 可以在浏览器中输入 localhost:8080 来检验 Tomcat 安装是否正确.
5). 若已经启动了一个 Tomcat 应用, 若再启动同一个 Tomcat 应用, 会抛出异常:
java.net.BindException: Address already in use: JVM_Bind:8080
因为端口已经被占用了.
可以通过修改 server.xml 文件中的配置信息来修改 Tomcat 服务器的端口号:
<Connector port="8989" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把 port 的值改为其他的端口号即可.
使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWEB 项目)
1). 把开发选项切换到 JavaEE2). 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到开发区的左边
3). 在 Servers 面板中新建 Tomcat 服务器. 一定要关联到 Tomcat 安装的根目录
4). 新建一个 Dynamic Web Project. 其中 Target Runtime 需选择 Tomcat6.0
5). 开发 Java WEB 应用
6). 可以通过 run on server 来运行 WEB 项目.
Servlet的HelloWorld类
接下来举一个Servlet的HelloWorld类:
1)创建一个Servlet接口的实现类:
public class HelloServlet implements Servlet{}
2)在 web.xml 文件中配置和映射这个 Servlet
<!-- 配置和映射 Servlet -->
<servlet>
<!-- Servlet 注册的名字,可任意取,但需要和mapping的name一致-->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.atguigu.javaweb.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>Servlet生命周期的方法:
由容器负责调用:
public class HelloServlet implements Servlet{
@Override
public void destroy() {
System.out.println("destory...");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo");
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {<pre name="code" class="java">}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("service");
}
public HelloServlet() {
System.out.println("helloServlet");
}
}
这说明 Serlvet 的单实例的!
2). init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet.
3). service: 被多次调用. 每次请求都会调用 service 方法. 实际用于响应请求的.
4). destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源.
ServletConfig:
封装了 Serlvet 的配置信息, 并且可以获取 ServletContext 对象.可以通过调用其的一些方法,获得配置信息。
配置Servlet的初始化参数:
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>javaweb.HelloServlet</servlet-class>
<!-- 配置 Serlvet 的初始化参数。 且节点必须在 load-on-startup 节点的前面 -->
<init-param>
<!-- 参数名 -->
<param-name>user</param-name>
<!-- 参数值 -->
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
<load-on-startup>-1</load-on-startup>
</servlet> load-on-startup参数:
可以指定 Serlvet 被创建的时机. 若为负数, 则在第一次请求时被创建.若为 0 或正数, 则在当前 WEB 应用被
Serlvet 容器加载时创建实例, 且数值越小越早被创建.
那么,该如何获取这些配置参数呢?
> getInitParameter(String name): 获取指定参数名的初始化参数
> getInitParameterNames(): 获取参数名组成的 Enumeration 对象.
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
String name = servletConfig.getInitParameter("user");
System.out.println(name);
String value = servletConfig.getInitParameter("password");
System.out.println(value);
Enumeration<String > names =servletConfig.getInitParameterNames();
while(names.hasMoreElements() ){
String name1 =names.nextElement();
String value1 =servletConfig.getInitParameter(name1);
System.out.println("=="+name1+"==="+value1 );
}
}
ServletContext
还有一个就是ServletContext:该对象由ServletConfig获取:
//获取servletContext 对象
ServletContext servletContext= servletConfig.getServletContext();该对象代表当前 WEB 应用: 可以认为 SerlvetContext 是当前 WEB 应用的一个大管家. 可以从中获取到当前 WEB 应用的各个方面的信息.
(1)获取当前 WEB 应用的初始化参数:
设置初始化参数: 可以为所有的 Servlet 所获取, 而 Servlet 的初始化参数只用那个 Serlvet 可以获取.
<!-- 配置当前 WEB 应用的初始化参数 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>获得初始化参数的方法和前面获得servlet的方法一致:
> getInitParameter(String name): 获取指定参数名的初始化参数
> getInitParameterNames(): 获取参数名组成的 Enumeration 对象.
ServletContext servletContext = servletConfig.getServletContext();
String driver = servletContext.getInitParameter("driver");
System.out.println("driver:" + driver);
Enumeration<String> names2 = servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
String name = names2.nextElement();
System.out.println("-->" + name);
}(2)获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是部署前的路径
String realPath = servletContext.getRealPath("/note.txt");
System.out.println(realPath);
(3)获得当前应用的名称:
String contextPath = servletContext.getContextPath();
System.out.println(contextPath);
(4)获取当前 WEB 应用的某一个文件对应的输入流.
getResourceAsStream(String path): path 的 / 为当前 WEB 应用的根目录.
InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
本文介绍了Servlet的概念及其实现方法,包括如何部署Tomcat服务器、配置环境变量,并详细解释了Servlet的生命周期及其配置信息的获取方式。
2238

被折叠的 条评论
为什么被折叠?



