Servlet

Servlet :

是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

一,Servlet的三种创建方式:

1、实现javax.servlet.Servlet接口

public class servletDemo1 implements Servlet{

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

    }

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

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

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

    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("hello demo1");
    }

}

这里写图片描述

2,继承javax.servet.GenericServlet类(适配器模式)

public class Demo2 extends GenericServlet{

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("hello demo2");
    }

}

3,继承javax.servlet.http.HttpServlet类(模板方法设计模式)

(开发中常用方式)
public class Demo3 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("doget#####");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("dopost*****");
    }
}

二、Servlet的线程安全

不要写全局变量,而写局部变量。

三,Servlet获取配置信息

作用1:可以获取servlet配置信息

方式1:
public class Demo1 extends HttpServlet {
    private ServletConfig config;

    @Override
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub
        this.config=config;
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        //使用初始化方法得到ServletConfig对象
        String value=config.getInitParameter("encoding");
        System.out.println(value);
    }
方式2:
public class Demo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

        //通过继承父类的方法得到ServletConfig
        /*String value=this.getServletConfig().getInitParameter("encoding");
        System.out.println(value);*/

        String value=this.getInitParameter("encoding");
        System.out.println(value);
    }

作用2:可以获得ServletContext对象

ServletContext: 代表的是整个应用。一个应用只有一个ServletContext对象。单实例。

域对象:在一定范围内(当前应用),使多个Servlet共享数据。
常用方法:
向ServletContext对象的map中添加数据

void setAttribute(String name,object value);

从ServletContext对象的map中取数据

Object getAttribute(String name);

public class Demo2_context extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext sc = this.getServletContext();
        sc.setAttribute("name", "tom");
    }
public class Demo3_context extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name=(String) this.getServletContext().getAttribute("name");
        if (name == null) {
            System.out.println("不能直接访问");
        }
        System.out.println(name);
    }
获取资源路径:
String getRealPath(String path);//根据资源名称得到资源的绝对路径.。可以得到当前应用任何位置的任何资源。
public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext sc=this.getServletContext();
        String path=sc.getRealPath("\\WEB-INF\\classes\\a.properties");
        Properties p=new Properties();
        p.load(new FileInputStream(path));
        System.out.println(p.getProperty("key"));
        }
实现Servlet的转发。
public class Demo4_path extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext sc=this.getServletContext();
        System.out.println("请问跳了吗?");
        sc.getRequestDispatcher("/servlet/demo5_request").forward(request, response);
        System.out.println("已经回来了");

    }
public class Demo5_request extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        System.out.println("来了呀,那你再跳回去吧");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值