赞
踩
web.xml:web应用部署描述符,主要用于各种web组件的注册。
复习:使用一个接口的传统方式:
使用Servlet接口的方式:
① 搭建Web开发环境
② 创建动态Web工程
③ 创建javax.servlet.Servlet接口的实现类:com.atguigu.servlet.MyFirstServlet
④ 在service(ServletRequest, ServletResponse)方法中编写如下代码,输出响应信息:
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
//1.编写输出语句,证明当前方法被调用
System.out.println("Servlet worked...");
//2.通过PrintWriter对象向浏览器端发送响应信息
PrintWriter writer = res.getWriter();
writer.write("Servlet response");
writer.close();
}
⑤ 在web.xml配置文件中注册MyFirstServlet
servlet对象是由servlet容器 创建的不是我们创建的所以要给出全类名 交给tomcat去反射创建
<!-- 声明一个Servlet,配置的是Servlet的类信息 --> <servlet> <!-- 这是Servlet的别名,一个名字对应一个Servlet。相当于变量名 --> <servlet-name>MyFirstServlet</servlet-name> <!-- Servlet的全类名,服务器会根据全类名找到这个Servlet --> <servlet-class>com.atguigu.servlet.MyFirstServlet</servlet-class> </servlet> <!-- 建立Servlet的请求映射信息 --> <servlet-mapping> <!-- Servlet的别名,说明这个Servlet将会响应下面url-pattern的请求 --> <servlet-name>MyFirstServlet</servlet-name> <!-- Servlet响应的请求路径。如果访问这个路径,这个Servlet就会响应 --> <url-pattern>/MyFirstServlet</url-pattern> </servlet-mapping>
说明:
:这个url-pattern可以配置多个,这时表示的就是访问这些url都会触发这个Servlet进行响应,运行浏览器,访问刚才配置的url路径,Servlet的service方法就会被调用。
中的文本内容必须以 / 或 *. 开始书写路径。相当于将资源映射到项目根目录下形成虚拟的资源文件。
中的可以声明多个,可以通过任意一个都可以访问。但是开发中一般只会配置一个。
⑥ 在WebContent目录下创建index.html
⑦ 在index.html中加入超链接 <a href=“MyFirstServlet”>To Servlet
⑧ 点击超链接测试Servlet
接收请求 【解析请求报文中的数据:请求参数】
处理请求 【DAO和数据库交互】
完成响应 【设置响应报文】
Web服务器 如 tomcate
Servlet对象是Servlet容器创建的,生命周期方法都是由容器调用的。这一点和我们之前所编写的代码有很大不同。在今后的学习中我们会看到,越来越多的对象交给容器或框架来创建,越来越多的方法由容器或框架来调用,开发人员要尽可能多的将精力放在业务逻辑的实现上。
当Servlet第一次接收请求时,Servlet容器【web容器|web服务器】创建Servlet【执行构造器】,之后执行init()方法,进行初始化操作。最后执行service()方法,处理请求,做出响应。【以后再次接收请求,只执行service()方法】。当关闭或重启服务器时,执行destroy()方法,销毁Servlet。
<!--设置Servlet创建时机:启动服务器时创建Servlet 不配置的话是第一次访问时创建
index:设置Servlet被创建优先级【int类型且正整数,最小值1】
数值越小,优先级越高
-->
<load-on-startup>1</load-on-startup>
此时,Servlet生命周期,如下调整
ServletConfig接口封装了Servlet配置信息,这一点从接口的名称上就能够看出来。
每一个Servlet都有一个唯一对应的ServletConfig对象,代表当前Servlet的配置信息。
对象由Servlet容器创建,并传入生命周期方法init(ServletConfig config)中。可以直接获取使用。
代表当前Web应用的ServletContext对象也封装到了ServletConfig对象中,使ServletConfig对象成为了获取ServletContext对象的一座桥梁。
ServletConfig对象的主要功能
获取Servlet名称:getServletName()
获取全局上下文ServletContext对象:getServletContext()
获取Servlet初始化参数:getInitParameter(String) / getInitParameterNames()。
使用如下:
通过String info = config.getInitParameter(“url”);的方式获取value值
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/dbname</param-value>
</init-param>
在 init中 只能测试一次
于是
package com.edu.shengda.servlet; import javax.servlet.*; import java.io.IOException; import java.io.PrintWriter; public class MyFirstServlet implements Servlet { //把ServletConfig config 从init方法中的局部变量 变为全局变量 private ServletConfig servletConfig; @Override public void init(ServletConfig config) throws ServletException { /* //1.获取ServletContext对象 ServletContext context = config.getServletContext(); //2.获取index.html的本地路径 //index.html的虚拟路径是“/index.html”,其中“/”表示当前Web应用的根目录, //即WebContent目录 String realPath = context.getRealPath("/index.html"); //realPath=D:\DevWorkSpace\MyWorkSpace\.metadata\.plugins\ //org.eclipse.wst.server.core\tmp0\wtpwebapps\MyServlet\index.html System.out.println("realPath="+realPath); */ //赋值给当前类的属性 this.servletConfig = config; } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //1.编写输出语句,证明当前方法被调用 System.out.println("Servlet worked..."); //2.通过PrintWriter对象向浏览器端发送响应信息 PrintWriter writer = res.getWriter(); writer.write("Servlet response"); writer.close(); //这样就可以多次调用了 String servle
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。