Servlet常见用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoweiccc/article/details/83445386

Servlet的学习

     Servlet是一个Java程序,运行在web服务器上,用来接受和响应客户端的http请求。
     更多的是配合动态资源来做。当然静态资源也需要使用Servlet,只不过Tomcat已经定义了一个DefaultServlet;Tomcat实际上是Servlet的一个容器
      

当刚开始要写Servlet时,出现了个小问题,就是在Myeclipse下找不到Servlet包,原因可能是当初从jdk1.8切换到1.7时,tomcat的jdk还没切换过来;或者是得改一下tomcat服务器的一个Targeted Runtimes选项的配置。
所以又得鼓捣,下面是解决方案:

1.先把配置tomcat的jdk版本换到1.7,步骤为
      1)Window->Preferences
      2)搜索tomcat 选择7.x,在选择jdk,接着将jdk1.8改为1.7即可
2.修改tomcat服务器的一个Targeted Runtimes选项
     1)右击项目名->properties
     2)选择下面的Targeted Runtimes
     3)选择右边你所打开的Tomcat 服务器->apply->ok即可

Servlet简单使用

1.一个web工程,一个服务器
2.测试运行web工程
3.新建一个类,实现Servlet接口
4.配置Servlet,告诉服务器,应用有的Servlet

先给出Servlet在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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>JavaWeb_1</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>
  
  <!-- 
  向tomcat登记,这个应用里又这个Servlet叫s1,具体路径是/JavaWeb_1/src/cw/Servlet/Servlet01.java
   -->
  <servlet>
  	<servlet-name>qq</servlet-name>
  	<servlet-class>cw.Servlet.Servlet01</servlet-class>
  </servlet>
    <!-- 
  注册Servlet的映射,servlet-name,找到上面注册的具体Servlet,url-pattern:在地址栏上的path
   -->
  <servlet-mapping>
  	<servlet-name>qq</servlet-name>
  	<url-pattern>/a</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>kk</servlet-name>
  	<servlet-class>cw.Servlet.Servlet02</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>kk</servlet-name>
  	<url-pattern>/b</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>mm</servlet-name>
  	<servlet-class>cw.Servlet.Servlet03</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>mm</servlet-name>
  	<url-pattern>/c</url-pattern>
  </servlet-mapping>
  
   <servlet>
  	<servlet-name>gg</servlet-name>
  	<servlet-class>cw.Servlet.Servlet04</servlet-class>
  	<!-- 让servlet提前加的一个标签,数值越小,在服务器创建的时间越早 -->
  	<load-on-startup>2</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>gg</servlet-name>
  	<url-pattern>/d</url-pattern>
  </servlet-mapping>
    
   <servlet>
  	<servlet-name>hh</servlet-name>
  	<servlet-class>cw.Servlet.Servlet05</servlet-class>
	<!-- 可以添加初始化参数 -->
	<init-param>
		<param-name>add</param-name>
		<param-value>haiK</param-value>
	</init-param>
	<init-param>
		<param-name>add2</param-name>
		<param-value>haiK2</param-value>
	</init-param>
	<init-param>
		<param-name>add3</param-name>
		<param-value>haiK3</param-value>
	</init-param>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>hh</servlet-name>
  	<url-pattern>/e</url-pattern>
  </servlet-mapping>
  
</web-app>

1.Servlet的通用写法:

Servlet是一个接口,GenericServlet是一个实现Servlet的类,HttpServlet是GenericServlet的子类。HttpServlet用于处理http的请求,可以定义一个类,继承HttpServlet复写doGet和doPost.

Servlet01.java

package cw.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 Servlet01 implements Servlet{

	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("hello world");
	}
	public void destroy() {
	}
	public ServletConfig getServletConfig() {	
		return null;
	}
	public String getServletInfo() {
		
		return null;
	}
	public void init(ServletConfig arg0) throws ServletException {
	}
}

Servlet02.java

package cw.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 Servlet02 extends HttpServlet{
	
	//Get请求会来这个方法
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("get.....");
	}
	
	//Post请求会来这个方法
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("Post.....");
	}
}

2.Servlet的生命周期

生命周期:从创建到销毁的一段时间
生命周期的方法:从创建到销毁,所调用的方法  

1)创建该servlet的实例时,就执行该方法,默认情况是访问该servlet,就会创建实例.一个servlet只会初始化一次,init()方法只会执行一次
2)只要客户端来了一个请求,那么就执行service方法,该方法可以被执行很多次.一次请求,对应一次service方法的调用.
3)servlet销毁时,会调用该方法.该项目从tomcat的里面移除会调用;正常关闭tomcat就会执行shutdown.bat.

Servlet03.java

package cw.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 Servlet03 implements Servlet{
	/*
	 1.创建该servlet的实例时,就执行该方法,默认情况是访问该servlet,就会创建实例.
	 一个servlet只会初始化一次,init()方法只会执行一次
	 */
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("Servlet初始化");
	}
	/*
	2.只要客户端来了一个请求,那么就执行这个方法
	该方法可以被执行很多次,一次请求,对应一次service方法的调用
	 */
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("++service方法被调用");
	}
	/*
	 3.servlet销毁时,会调用该方法.
	 	1)该项目从tomcat的里面移除会调用
	 	2)正常关闭tomcat就会执行shutdown.bat
	 */
	public void destroy() {
	
	}
	public ServletConfig getServletConfig() {
		
		return null;
	}

	public String getServletInfo() {
		
		return null;
	}
}

3.用于让servlet创建实例的时机提前的写法:

(1)因为在默认情况下,只有在初次访问servlet时,才会执行init方法。而我们有时需要在这个方法里面执行一些初始工作,所以我们选择让这个初始化的时间提前.
(2)在配置时,使用load-on-startup元素来指定,给定的数字越小,启动的实际越早.

Servlet04.java

package cw.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 Servlet04 implements Servlet{

	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("Servlet初始化+1");
	}
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
	}
	public void destroy() {
	
	}
	public ServletConfig getServletConfig() {
		
		return null;
	}

	public String getServletInfo() {
		
		return null;
	}
}

4.ServletConfig的作用:

ServletConfig:可以获取servlet在配置的一些信息
用途:当自己开发的一些应用,使用别人的技术,它的代码放置在了自己的servlet类里面;刚好这个servlet里面需要一个数字或者叫做变量值,但是这个值不能是固定的,所以要求使用到这个servlet的开发人员,在注册servlet的时候,必须要在web.xml里面声明init-params

Servlet05.java

package cw.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 Servlet05 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//1.得到servlet配置对象,专门用于在配置servlet的信息
		ServletConfig sc=getServletConfig();
		//2.获取servlet名称,获取到的是配置servlet里面servlet-nbame的文本内容
		String scName=sc.getServletName();
		System.out.println(scName);
		//3.可以获取某一个参数
		String add=sc.getInitParameter("add");
		if(add==null){
			throw new IllegalArgumentException("servlet在配置时,一定要写add这个参数");
		}else{
			System.out.println("add....");
		}
		System.out.println(add);	//haiK
		//4.可以获取所有参数的名称
		Enumeration<String> names=sc.getInitParameterNames();
		//遍历取出所有的参数名称
		while(names.hasMoreElements()){
			String name=(String)names.nextElement();
			String value=sc.getInitParameter("name");
			System.out.println(name+"..."+value);  
		}
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException { 
	}
}

猜你喜欢

转载自blog.csdn.net/zoweiccc/article/details/83445386