Servlet的继承关系及几种实现方法

Dynamic web module version版本:2.5

Servlet的继承关系:

在这里插入图片描述
在这里插入图片描述

实现方法:
方式一:
  • 1、新建普通java类
  • 2、继承HttpServlet类
  • 3、重写service()方法
  • 4、配置web.xml配置项(WebContent/WEB-INF目录下的web.xml)
public class Servlet01 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		System.out.println("Servlet01...");
	}
	
	/**
	 * 该方法在web.xml配置项中有初始化参数是需要重写. 
	 * 可以接收web.xml配置项
	 * <init-param>中的初始化参数
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		// 得到初始化参数
		String encode = config.getInitParameter("encode");
		System.out.println("编码:" + encode);
	}
	
}

web.xml配置项写法

<?xml version="1.0" encoding="UTF-8"?> <!-- ?xml表示声明当前是xml文件;version表示当前xml的版本;encoding表示文件编码; 这句话一定要写在第一行 -->
<!-- web-app表示是当前xml文件的根节点,一个xml文件有且只有一个根节点  -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
   <!-- 当前项目的名称  -->
  <display-name>servlet01</display-name>
  <!-- 当访问该项目时,没有给定资源路径,会自动在welcome-file-list标签中查找配置好的路径,找到则显示,未找到报404 -->
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 
  	注意点:
  		1、修改了xml配置文件中的数据,必须重启服务器才会生效
  		2、servlet标签中的servlet-name不能有相同的
  		3、servlet-mapping中的url-pattern的值不能有相同的
  			否则报错:The servlets named [servlet01] and [servlet02] are both mapped to the url-pattern [/ser01] which is not permitted
   		4、说明: url-pattern 可以配多个(一个 servlet 可以通过多个 url-pattern 访问)
   			通配符 “*”只能放在最前面或最后面,不能放中间且不能单独存在(以/分割的,不能和单词组成整体)。越精确越优先。
   -->
  
  <!-- 配置servlet -->
  <servlet>
  	<servlet-name>servlet01</servlet-name> <!-- 自定义名称,给服务器看的,与servlet-mapping标签中的servlet-name的值一致 -->
  	<servlet-class>com.shsxt.servlet.Servlet01</servlet-class> <!-- 当前配置的servlet类的路径;按住"ctrl"键 ,能点到类中表示路径正确-->
  	
  	<!-- 初始化参数 -->
  	<init-param>
  		<param-name>encode</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  	<!-- 自启动:服务器启动时自动实例化servlet;值越小,优先级越高 -->
  	<load-on-startup>2</load-on-startup>
  	
  </servlet>
  
  <!-- 配置servlet的映射  -->
  <servlet-mapping>
  	<servlet-name>servlet01</servlet-name> <!-- 自定义名称,给服务器看的,与servlet标签中的servlet-name的值一致 -->
  	<url-pattern>/ser01</url-pattern> <!-- 对外访问路径,给浏览器访问的;路径前要加"/" -->
  	
  	<!-- 通配符"*"的使用规则:只能放在最前面或者最后面,不能放中间,不能单独使用,不能和单词组合使用;值越准确,优先级越高  -->
  	<!-- 设置路径只要以html结尾,都可以访问到该servlet -->
  	<url-pattern>*.html</url-pattern>
  	<!-- 路径包含指定目录都可访问 -->
  	<url-pattern>/test/*</url-pattern>
  	<!-- 无论什么路径都可访问 -->
  	<url-pattern>/*</url-pattern>
  	
  </servlet-mapping>
</web-app>

web.xml配置可能出现的错误:
1.The markup in the document following the root element must be well-formed.
解决方法:
web.xml中的标签要写在<web-app></web-app>中间。

2.严重: Allocate exception for servlet servlet01
java.lang.ClassNotFoundException: com.shsxt.servlet.Servlet01
修改servlet-class对应的项目路径及名称
在这里插入图片描述
3.xml文件eclipse没有提示:
文件打开格式不对, 右键–>open with -->XML Editor 打开;
左下角换成Source就是xml格式打开,有提示功能.
在这里插入图片描述

方式二:
  • 1、新建普通java类
  • 2、继承GenericServlet类
  • 3、实现service()方法
  • 4、配置web.xml配置项(WebContent/WEB-INF目录下的web.xml>>web.xml文件如同方式一)
public class Servlet02 extends GenericServlet {
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		System.out.println("Servlet02...");
	}
}
方式三:
  • 1、新建普通java类
  • 2、实现Servlet接口
  • 3、实现接口中方法
  • 4、配置web.xml配置项(WebContent/WEB-INF目录下的web.xml>>web.xml文件如同方式一)
public class Servlet03 implements Servlet {
	/**
	 * 系统方法,由系统调用,初始化方法,当servlet被实例化时调用,只会执行一次
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("Servlet03 出生了...");
	}

	@Override
	public ServletConfig getServletConfig() {
		return null;
	}

	/**
	 * 系统方法,由系统调用,服务方法,当servlet被访问时调用,可以被执行多次
	 */
	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		System.out.println("Servlet03...");
	}

	@Override
	public String getServletInfo() {
		return null;
	}

	/**
	 * 系统方法,由系统调用,销毁方法,当servlet被销毁时调用,只执行一次(服务器正常关闭才会执行)
	 */
	@Override
	public void destroy() {
		System.out.println("Servlet03 go die了...");
	}
}
方式四:
  • 1、新建普通java类
  • 2、继承HttpServlet类
  • 3、重写doGet()和doPost()方法
  • 4、配置web.xml配置项(WebContent/WEB-INF目录下的web.xml)
public class Servlet04 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("Servlet04... GET...");
		doPost(req, resp);//调用doPost方法,这样不用重复写代码
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("Servlet04... POST...");
		
		// 代码全写在post中
	}
}
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Java Web应用程序中,我们访问Servlet API有以下几种方法: 1. 在Servlet中使用内置对象request和response来访问Servlet API。 2. 在Servlet中使用getServletContext()方法来获取ServletContext对象,然后使用该对象来访问Servlet API。 3. 在JSP页面中使用内置对象request和response来访问Servlet API。 4. 在JSP页面中使用内置对象application来获取ServletContext对象,然后使用该对象来访问Servlet API。 5. 在过滤器中使用内置对象request和response来访问Servlet API。 6. 在监听器中使用内置对象servletContextEvent来获取ServletContext对象,然后使用该对象来访问Servlet API。 这些方法可以帮助我们在Java Web应用程序中访问Servlet API。 ### 回答2: 在Java中,访问Servlet API的方式有以下几种方法: 1. 继承HttpServlet类:创建一个继承自HttpServlet的类,并重写其中的doGet、doPost等方法来处理不同的HTTP请求。然后在web.xml配置文件中将该Servlet映射到相应的URL地址,当请求到达该URL时,容器会调用对应的Servlet类来处理请求。 2. 实现Servlet接口:创建一个实现Servlet接口的类,并实现其中的方法。然后通过web.xml配置文件中的servlet元素和servlet-mapping元素来将该类映射到URL地址,从而使得请求到达时,容器会调用该类来处理请求。 3. 注解方式:可以使用@WebServlet注解来定义一个Servlet类,并通过urlPatterns属性指定该Servlet要处理的URL地址。这种方式不需要在web.xml中显式配置,容器会根据注解自动进行映射。 上述三种方式都可以实现Servlet API的访问,具体选择哪种方式取决于个人偏好和项目需求。 ### 回答3: Action访问Servlet API有以下几种方法: 1. 通过继承HttpServlet类:Action可以继承HttpServlet类,从而获得访问Servlet API的能力。使用这种方式,需要重写doGet()、doPost()等方法来处理请求,并可以通过request和response对象获取请求参数和发送响应。 2. 通过实现Servlet接口:Action可以实现Servlet接口,在该接口的service()方法中处理请求,并通过ServletRequest和ServletResponse对象访问Servlet API。与继承HttpServlet类相比,这种方式需要自己处理请求的分发和HTTP请求方法的判断。 3. 通过注入Servlet API对象:Action可以通过依赖注入的方式,在构造函数或者通过属性注入ServletRequest和ServletResponse对象,从而获取访问Servlet API的能力。这种方式适合于使用框架来管理Action实例的情况,可以方便地使用Servlet API的各种方法。 4. 通过Servlet容器提供的API:Action可以通过访问ServletContext对象来获取其他Servlet的信息,包括路径、初始化参数等。此外,也可以通过访问HttpSession对象来获取或设置会话信息。 总之,Action访问Servlet API的方式主要有继承HttpServlet类、实现Servlet接口、注入Servlet API对象和通过Servlet容器提供的API。根据具体的需求和项目情况,可以选择合适的方式来访问Servlet API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值