Servlet笔记:servlet编写的三种方式

一、servlet概念
1、servlet本身是java类,这种java类可以提供web形式的访问(Java EE 规范)

2、Servlet接口中的方法(共有五个方法)
//初始化servlet对象的时候被调用
void init(ServletConfig config)

//销毁servlet对象的时候被调用
void destroy()

//访问servlet对象的时候被调用
void service(ServletRequest req, ServletResponse res)

//返回servlet相关信息,比如作者、版本、版权等
//父类中(GenericServlet)默认返回一个空字符串 “”
//如果需要的话,程序员可以自己重写这个方法
String getServletInfo()

//返回ServletConfig对象
ServletConfig getServletConfig()

二、编写一个servlet的三种方式
1、第一种:
编写一个类实现Servlet接口,实现service()方法(主要实现这个方法,还有其他方法)
例如:

package com.briup.web.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;
import javax.servlet.annotation.WebServlet;

//采用注解的方法(servlet3.0以后),或者在web.xml配置的方式来访问servlet
//@WebServlet("/test1")
public class Test1Servlet implements Servlet{

@Override
public void destroy() {	
}

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

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

@Override
public void init(ServletConfig conf) throws ServletException {
}

@Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
    //设置request中的编码为UTF-8
		req.setCharacterEncoding("UTF-8");
	//设置response中的编码为UTF-8
		resp.setCharacterEncoding("UTF-8");
	//设置响应头部,告诉浏览器响应内容编码为utf-8,jpg的图片则使用"jpg/html"
		resp.setContentType("text/html;charset=utf-8");
	//响应输出hello test1 中国
		resp.getWriter().print("hello test1 中国");
	
	}
}

浏览器中采用:(ip:Tomcat端口号/项目名/test1)就可以访问到这个servlet,在浏览器中打印hello test1 中国
例如:http://127.0.0.1:10086/ServletWeb/test1

在web.xml中配下列文件等同于在java文件中@WebServlet("/test1"),两者选一个

 
	test1
	com.briup.web.servlet.Test1Servlet
	

	test1
	/test1

2、第二种方法
写一个类继承父类GenericServlet
抽象类GenericServlet里面有一个抽象方法service,这个方法是servlet接口中的方法,所以GenericServlet只实现了Servlet接口中的四个抽象方法,
还剩下这个service没有实现.同时,GenericServlet类中不但实现了Servlet接口中的init方法,而且还重载了一个无参的init()方法

例如:

package com.briup.web.servlet;
 import java.io.IOException;
 import javax.servlet.GenericServlet;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.annotation.WebServlet;
 @WebServlet("/test2")
 public class Test2Servlet extends GenericServlet{
/**
 * 默认序列化版本号
 */
private static final long serialVersionUID = 1L;

@Override
public void service(ServletRequest rep, ServletResponse res) throws ServletException, IOException {
	res.getWriter().print("hello test2");
	
	  }
  }

3、第三种方法继承父类HttpServlet
HttpServlet是一个抽象类,但是没有任何抽象方法
HttpServlet类中自定义了很多doXxxx方法,每一种方法都对应了浏览器发送请求的方法,一般常用的浏览器发请求方式为get和post,这俩种方式分别对应了这个类中的doGet方法和doPost方法。
HttpServlet类中,有俩个service方法
//这个service方法Servlet接口中的
void service(ServletRequest req, ServletResponse res){…}
//这个service是HttpServlet中重载的方法
void service(HttpServletRequest req, HttpServletResponse resp){…}

例如:

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
 import javax.servlet.annotation.WebInitParam;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 @WebServlet(value="/test3" )
 public class Test3Servlet extends HttpServlet{
/**
 * 默认序列化版本号
 */
private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	 //设置request中的编码为UTF-8
		req.setCharacterEncoding("UTF-8");
	//设置response中的编码为UTF-8
		resp.setCharacterEncoding("UTF-8");
	//设置响应头部,告诉浏览器响应内容编码为utf-8,jpg的图片则使用"jpg/html"
		resp.setContentType("text/html;charset=utf-8");
	//响应输出hello test1 中国
		resp.getWriter().print("hello test3 中国");	
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	doGet(req, resp);
	
}
}

你可能感兴趣的:(Web学习笔记)