Servlet的使用

Servlet的使用

1.Servlet介绍

​ JavaTM servlets 是一个不受平台约束的Java小程序,它可以被用来通过多种方法扩充一个Web服务器的功能。你可以把Servlet理解成Server上的 applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。

​ Servlet与applets不同的地方是,它不运行在Web浏览器或其他图形化的用户界面上。Servlet通过servlet引擎运行在Web服务器中,以执行请求和响应,请求、响应的典型范例是HTTP协议。

​ 一个客户端程序,可以是一个Web浏览器,或者是非其他的可以连接上Internet的程序,它会访问Web服务器并发出请求。这个请求被运行在Web服 务器上的Servlet引擎处理,并返回响应到Servlet。Servlet通过HTTP将这个响应转发到客户端。在功能上,Servlet与CGI、NSAPI有点类似,但是,与他们不同的是:Servlet具有平台无关性。

​ Servlet更多的是配合动态资源来做,当然静态资源也需要使用到Servlet,只不过Tomcat里面已经定义好了一个Default Servlet。

2.Hello,Servlet!

1.配置Tomcat

1).打开Java EE视图,在Server下右键菜单点击new创建一个Server;

2).选择Tomcat v7.0 Server,Next;

3).配置Tomcat installation directory,也就是Tomcat的安装目录;

4).单击finish,右键Server下新建的服务器,选择open,选中Server Locations中的第二项Use Tomcat installstion(…)。

5).保存,Tomcat就配好了。

创建Dynamic Web Project项目,Next,Dynamic web module version选择2.5版本,然后finish,就创建了一个动态web工程。在web项目上右键,Run as --> Run on Server,web项目就启动了。

wtpwebapps目录:放置eclipse编写的web工程。

3.Servlet入门

Servlet初体验

用Eclipse导入web项目时,出现与javax.servlet相关的Jar包无法引入的问题;

原因是JDK并不包含servlet-api.jar这个包,解决方案有:

\1. 在网上下载servlet-api.jar这个包;

\2. 在tomcat的lib路径下找到这个包,C:\apache-tomcat-6.0.48\lib

直接将jar包复制粘贴到JDK目录下并不能自动引入,所以右键单击工程->properties->Java Build Path->Libraries->Add External JARs…->servlet-api.jar

1.新建一个类,实现Servlet接口;

2.配置Servlet,用意:告诉Tomcat我们的应用有这些个Servlet。

打开WebContent/WEB_INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>mysite</display-name>
  <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>
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>com.nikehu.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/a</url-pattern>
  </servlet-mapping>
</web-app>

注册servlet,<servlet-name>虚拟名字路由匹配<servlet-mapping>时使用,<servlet-class>Servlet编译出来的.class文件的具体路径,包名.类名。

package com.nikehu.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet{
	
	
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("Hello,Servlet!");
		
	}

	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}	
}

4.Servlet执行过程

<servlet>
	<servlet-name>HelloServlet</servlet-name>
	<servlet-class>com.nikehu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>HelloServlet</servlet-name>
	<url-pattern>/a</url-pattern>
</servlet-mapping>

url:http://localhost:8080/mysite/a

1.找到tomcat应用 http://localhost:8080

2.找到mysite项目

3.找到web.xml中url-pattern为/a的项的servlet-name

4.找到servlet-name为HelloServlet的项的<servlet>中的<servlet-class>,然后根据servlet-class的值执行相应的servlet程序。创建该类的实例,执行该实例的service()方法

5.Servlet通用写法

继承javax.servlet.Servlet的已知实现子类,并重写我们所需要的方法。

Servlet–GenericServlet–HttpServlet(用于处理Http请求)

package com.nikehu.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{
	
//	@Override
//	protected void service(HttpServletRequest req, HttpServletResponse resp)
//			throws ServletException, IOException {
//		System.out.println("Hello,MyServlet!");
//	}
//	
	/**
	 * GET请求会执行doGet()方法
	 */
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("get----------");
	}
	
	/**
	 * POST请求会执行doPost()方法
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("post---------");
	}
}
  <servlet>
  	<servlet-name>MyServlet</servlet-name>
  	<servlet-class>com.nikehu.servlet.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>MyServlet</servlet-name>
  	<url-pattern>/b</url-pattern>
  </servlet-mapping>

6.Servlet生命周期

生命周期:从创建到销毁的一段时间。

生命周期方法:

package com.nikehu.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 演示Servlet生命周期
 * This interface defines methods to initialize a servlet, to service requests, 
 * and to remove a servlet from the server.
 * These are known as life-cycle methods and are called in the following sequence: 
 * 1.The servlet is constructed, then initialized with the init method. 
 * 2.Any calls from clients to the service method are handled. 
 * 3.The servlet is taken out of service, then destroyed with the destroy method, 
 * then garbage collected and finalized. 
 */

public class LifeCycleServlet implements Servlet{
	
	/**
	 * 在创建Servlet实例时,就执行init()方法
	 * 默认情况下,是初次访问该Servlet路由时才会创建实例
	 * 一个Servlet只会初始化一次,init()方法只会执行一次
	 */
	public void init(ServletConfig config) throws ServletException {
		System.out.println("LifeCycleServlet 初始化了...");
		
	}

	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	
	/**
	 * 只要客户端来了一个请求,就会执行service()方法;
	 * 一次请求对应一次service()方法的执行
	 */
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		System.out.println("LifeCycleServlet service()方法执行了");
		
	}

	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
	
	/**
	 * 当Servlet实例销毁时,会执行destory()方法;
	 * 该项目从服务器里面移除时,会执行destory()方法;
	 * 正常关闭服务器时,会执行destory()方法;执行shutdown.bat时。
	 */
	public void destroy() {
		System.out.println("LifeCycleServlet destory()方法执行了");
		
	}

}
  <servlet>
  	<servlet-name>LifeCycleServlet</servlet-name>
  	<servlet-class>com.nikehu.servlet.LifeCycleServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>LifeCycleServlet</servlet-name>
  	<url-pattern>/c</url-pattern>
  </servlet-mapping>

7.Servlet初始化提前

让Servlet创建的时机提前

默认情况下,只有在初次访问Servlet的时候,才会执行init()方法,有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至时做一些比较耗时的逻辑。此时,我们需要让init()方法提前执行。

做法:修改web.xml文件如下

<servlet>
  	<servlet-name>MyServlet01</servlet-name>
  	<servlet-class>com.nikehu.servlet.MyServlet01</servlet-class>
  	<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>MyServlet01</servlet-name>
	<url-pattern>/d</url-pattern>
</servlet-mapping>

<load-on-startup>表示在服务器启动时就创建servlet实例,其值时一个数值,数值越小,创建的时机越早,一般不写复数,从2开始。

8.Servlet ServletConfig

Servlet配置对象,通过这个对象,可以获取Servlet在配置的时候的一些信息。

package com.nikehu.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServletConfig extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//ServletConfig 可以获取Servlet配置时的一些信息
		//1.得到Servlet配置对象,专门用于在配置servlet的信息
		ServletConfig config = getServletConfig();
		//获取Servlet名称,打印的时web.xml中的<servlet-name>的值
		String  servletName = config.getServletName();
		System.out.println(servletName);
		//获取初始化参数
		String add = config.getInitParameter("add");
		System.out.println("add="+add);	
		//获取所有初始化参数名称
		Enumeration<String> initParameterNames = config.getInitParameterNames();
		//遍历打印每一个名称
		while (initParameterNames.hasMoreElements()) {
			String string = (String) initParameterNames.nextElement();
			System.out.print(string+"=");
			System.out.println(config.getInitParameter(string));
		}
	}
	
	/**
	 * 来了POST请求,让他走doGet()方法.
	 */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req, resp);
	}

}
  <servlet>
  	<servlet-name>HelloServletCon</servlet-name>
  	<servlet-class>com.nikehu.servlet.HelloServletConfig</servlet-class>
  	<!-- 可以添加初始化参数 -->
  	<init-param>
  		<param-name>name</param-name>
  		<param-value>张三</param-value>
  	</init-param>
  	<init-param>
  		<param-name>age</param-name>
  		<param-value>22</param-value>
  	</init-param>
  	<init-param>
  		<param-name>add</param-name>
  		<param-value>西安</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>HelloServletCon</servlet-name>
  	<url-pattern>/f</url-pattern>
  </servlet-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Servlet 是一种运行在 Web 服务器上的 Java 类,用于处理来自客户端(浏览器)的请求并生成响应。Servlet 通常用于开发 Web 应用程序,如电子商务网站、博客、社交平台等。 以下是 Java Servlet使用教程: 1. 下载并安装 Java 开发工具包(JDK)和 Apache Tomcat 服务器。 2. 创建一个 Java 项目,并在项目中创建一个 Servlet 类。例如,创建一个名为 MyServletServlet 类: ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("Hello, World!"); } } ``` 3. 在 web.xml 文件中配置 Servlet。例如,在 web.xml 文件中添加以下代码: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 4. 启动 Tomcat 服务器,并在浏览器中访问 `http://localhost:8080/your-application/myservlet`。您应该能够看到 "Hello, World!" 的输出。 这只是 Java Servlet 的基本用法。它还有很多其他功能,例如处理表单数据、会话管理、过滤器等。您可以查阅相关文档来深入学习。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值