一、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);
}
}