javaWeb的servlet的使用

137 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

servlet讲解

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

使用IDEA创建Servlet程序

图片.png

配置Servlet信息、一般为类名大写,配置xml为类名的小写

图片.png

六.Servlet继承体系

javax.servlet Interface ServletServlet接口,只是负责定义Servlet程序的访问规范
javax.servlet Class GenericServletGenericServlet 类实现lServlet接口,做了很多空实现,并且持有一个ServletConfig类的引用。并对ServletConfig的使用做一些方法
javax.servlet.http Class HttpServletHttpServlet抽取类实现了service()方法,并实现了请求的分发处理
自定义的Servlet程序 --->根据需要重写doGet或doPost方法String method = req.getMethod();

七.ServletConfig类

ServletConfig类为Servlet程序的配置信息类 servlet程序和ServletConfig对象都说由Tomcat负责创建,我们负责使用,Servlet程序默认是第一次访问的时候创建,Servlet程序创建时,就创建一个对应的ServletConfig对象。 1.ServletConfig类的三大应用        1).可以获取Servlet程序的别名Servlet-name        2).获取初始化参数init-param        3).获取ServletContext对象

public class ServletTest implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
//        1).可以获取Servlet程序的别名Servlet-name
        System.out.println("ServletTest 的别名为:" + servletConfig.getServletName());
//        2).获取初始化参数init-param
        System.out.println("初始化参数username为:"+ servletConfig.getInitParameter("username"));
        System.out.println("初始化参数password为:"+ servletConfig.getInitParameter("password"));
        System.out.println("初始化参数url为:"+ servletConfig.getInitParameter("url"));
        System.out.println("初始化参数Driver为:"+ servletConfig.getInitParameter("Driver"));
//        3).获取ServletContext对象
        System.out.println(servletConfig.getServletContext());
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

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

    @Override
    public void destroy() {

    }
}

这是在xml里面配置的init的参数它只可以得到自己的Servlet部署的信息,不能获取别的Servlet的信息

<servlet>
        <servlet-name>ServletTest</servlet-name>
        <servlet-class>com.Demo.Servlet.ServletTest</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/test</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>Driver</param-name>
            <param-value>com.mysql.jdbc.Driver</param-value>
        </init-param>
    </servlet

图片.png

八.ServletContext类

1.ServletContext是一个接口,他表示Servlet上下文 2.一个web工程,只有一个ServletContext对象实例 3.ServletContext对象是一个域对象(域对象是可以象Map那样存取数据的对象,叫域对象,域指的是存取数据的操作范围、Context的范围是整个web工程) 4.ServletContext在web工程部署启动的时候创建,在web工程停止的时候销毁

存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()
4.ServletContext类的四个作用
	1).获取web.xml中配置的上下文参数
	

        1.获取web.xml中配置的上下文参数
        2.获取当前的工程路径
        3.获取工程部署后服务器硬盘的绝对路径
        4.象Map一样存取数据

public class ContextServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

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

//        1.获取web.xml中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();
        String username = context.getInitParameter("username");
        System.out.println("context-param参数username的值为:" + username);
        System.out.println("context-param参数password的值为:" + context.getInitParameter("password"));
//        2.获取当前的工程路径
        System.out.println("当前路径:" + context.getContextPath());
//        3.获取工程部署后服务器硬盘的绝对路径
        //斜杠被服务器解析地址为:http://ip:port/工程名   映射到IDEAdaima的web目录
        System.out.println("工程部署的路径是:" + context.getRealPath("/"));
//        4.象Map一样存取数据
        ServletContext context1 = getServletContext();  //先获取servletContext对象
        context1.setAttribute("key1","value1");
        context1.setAttribute("key2","value2");
        context1.setAttribute("key3","value3");
        context1.setAttribute("key4","value4");
        System.out.println("Context1中key1的数据" + context1.getAttribute("key1"));
        System.out.println("Context1中key2的数据" + context1.getAttribute("key2"));
        System.out.println("Context1中key3的数据" + context1.getAttribute("key3"));
        System.out.println("Context1中key4的数据" + context1.getAttribute("key4"));
    }
}

图片.png