概述
Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet,filter,listener统称为JavaWeb的三大组件,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
- 接收请求数据;
- 处理请求;
- 完成响应
1 servlet创建
需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、在web.xml中配置servlet 把开发好的Java类部署到web服务器中
开发一个servelt的步骤
创建第一个servlet程序
//开发一个Serlvet 实现Serlvet接口
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init。。。。。。。");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("get Servlet config。。。。");
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service。。。。。。");
}
@Override
public String getServletInfo() {
System.out.println("servlet info。。。。。");
return null;
}
@Override
public void destroy() {
System.out.println("destory。。。。。");
}
}
配置和映射Serlvet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet> <!--给当前的servlet配置一个名称-->
<servlet-name>helloSerlvet</servlet-name>
<!--指定要配置的servlet是哪一个具体的serlvet 此处需要使用全类名-->
<servlet-class>org.lanqiao.web.HelloServlet</servlet-class>
</servlet> <!-- 配置serlvet映射-->
<servlet-mapping>
<!--映射的色弱略同的名称 需要对应上边的serlvet-name-->
<servlet-name>helloSerlvet</servlet-name>
<!--serlvet请求规则-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
请求的过程: tomcat
localhost:8080/
tomcat中 /默认会请求servlet中的一个默认的defaultServlet
执行到welcome-file-list
url-pattern常用的配置方法:
/ : 表示项目的根路径
/* :*是通配符 无论后边是什么都无所谓 都可以匹配的到 * 0-N个字符
多级路径配置
<!--配置serlvet映射-->
<servlet-mapping>
<!--映射的色弱略同的名称 需要对应上边的serlvet-name-->
<servlet-name>helloSerlvet</servlet-name>
<!--serlvet请求规则-->
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
使用扩展名配置
<!-- 配置serlvet映射-->
<servlet-mapping>
<!-- 映射的色弱略同的名称 需要对应上边的serlvet-name-->
<servlet-name>helloSerlvet</servlet-name>
<!-- serlvet请求规则-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
常用的 扩展名 .do .action
2 Sevlet的生命周期:
-
构造器:只被调用一次。当第一次请求Servlet时,创建Servlet的实例,调用构造器。说明Servlet是单实例的。
-
init :表示servlet的初始化 执行一次
-
service:servlet的服务方法 是处理请求的 每一次请求都会执行service方法
-
destroy:销毁(死亡) 执行一次 serlvet从serlvet容器中卸载的时候 才会执行
init() 方法创建好servlet实例后立即被调用:
创建时机可控:
- 默认情况下 是当第一次请求servlet的时候 才会执行该init 方法 创建servlet
<load-on-startup>0</load-on-startup>
-
该参数>=0 则表示该serlvet随着容器的启动而完成初始化
数字越小 初始化时机越早
-
当参数<0 则servelt的初始化时机为第一次请求时
此时初始话的时机 与数字大小无关 与请求顺序有关
每个Serlvet在整个声明周期中 有几个实例对象:
A 只有一个
B 每次都会产生一个新的
Servlet —接口
GenericServlet—抽象类 —service
HttpServlet — 抽象类 —无抽象方法 该类提供了对Http协议的支持
在开发中 sevlet的实现 采用继承HttpSerlvet,并重写doGet和doPost
public class HttpServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求处理的核心代码
System.out.println("请求处理。。。。。");
}
}
3 Servlet API
3.1ServletConfig
- ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,对应web.xml文件中的元素。
- String getServletName():获取Servlet在web.xml文件中的配置名称,即指定的名称;
- Enumeration getInitParameterNames():用来获取在web.xml中配置的所有初始化参数名称;
- String getInitParameter(String name):用来获取在web.xml中配置的初始化参数,通过参数名来获取参数值;
- ServletContext getServletContext():用来获取ServletContext对象,ServletContext会在后面讲解;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//获取web.xml中配置的该sevelt的
//<servlet-name>helloSerlvet</servlet-name>的值
String servletName = servletConfig.getServletName();
System.out.println("servletName:---"+servletName);
//获取该sevlet中所有的 初始化参数的名称
Enumeration<String> names = servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
System.out.println("parameterName ="+names.nextElement());
}
//获取初始化参数的对应的值
String username = servletConfig.getInitParameter("username");
System.out.println(username );
String password = servletConfig.getInitParameter("password");
System.out.println(password);
}
3.2 ServletContext
3.2.1 servlet概述
服务器会为每个应用创建一个ServletContext对象:
- ServletContext对象的创建是在服务器启动时完成的;
- ServletContext对象的销毁是在服务器关闭时完成的。
- ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。
- Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。
- 由于一个WEB应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为 application 对象(Web应用程序对象)。
- 功能:
- **获取WEB应用程序的初始化参数 **
- 记录日志
- **application域范围的属性 **
- 访问资源文件
- WEB应用程序之间的访问
3.2.2.获取ServletContext
- ServletConfig#getServletContext();
- GenericServlet#getServletContext();
- HttpSession#getServletContext()
- ServletContextEvent#getServletContext()
ServletContext application = servletConfig.getServletContext();
//获取初始化参数
String name = application.getInitParameter("name");
String age = application.getInitParameter("age");
System.out.println(name+"---"+age);
web.xml
<!-- ServletContext的初始化参数 可以被所有的servelt 所共享 -->
<context-param>
<param-name>name</param-name>
<param-value>jack</param-value>
</context-param>
<context-param>
<param-name>age</param-name>
<param-value>23</param-value>
</context-param>
<servlet>
<!--给当前的servlet配置一个名称-->
<servlet-name>helloSerlvet</servlet-name>
<!--指定要配置的servlet是哪一个具体的serlvet 此处需要使用全类名-->
<servlet-class>org.lanqiao.web.HelloServlet</servlet-class>
<!--配置初始化参数 可以配置多个 该初始化参数只针对当前servelt有效-->
<init-param>
<param-name>username</param-name>
<param-value>tom</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
<!--必须位于最后-->
<load-on-startup>-100</load-on-startup>
</servlet>
<!--配置serlvet映射-->
<servlet-mapping>
<!--映射的色弱略同的名称 需要对应上边的serlvet-name-->
<servlet-name>helloSerlvet</servlet-name>
<!--serlvet请求规则-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2.2.3 javaWEB的域对象
ServletContext是JavaWeb四大域对象之一:
- PageContext;
- ServletRequest;
- HttpSession;
- ServletContext
所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:
- void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;
- Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性;
- void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;
- Enumeration getAttributeNames():获取所有域属性的名称;
最后
以上就是心灵美铃铛为你收集整理的servlet创建1 servlet创建2 Sevlet的生命周期:3 Servlet API的全部内容,希望文章能够帮你解决servlet创建1 servlet创建2 Sevlet的生命周期:3 Servlet API所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复