温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

我对Servlet的理解

发布时间:2020-07-15 09:40:17 来源:网络 阅读:419 作者:智者无疆 栏目:开发技术

Servlet是java web中的动态资源,是三大组件(Servlet,Filter,Listener)之一,用于处理客户端的请求,并作出相应,具体用法为:

一,实现Servlet的三种方式:

1.实现javax.servlet.Servlet接口

    public class ServletOne implements Servlet{

        public void destroy(){}

        public ServletConfig getServletConfig(){}

        public String getServletInfo(){}   

        public void init(ServletConfig arg0) throws ServletException {}

        public void service(ServletRequest request, ServletResponse response) 

               throws ServletException, IOException {}

    }

   (1).init()方法在Servlet创建时被调用

   (2).destroy()方法在Servlet销毁时创建

   (3).service()方法每请求一次servelt调用一次

2.继承javax.servlet.GenericServlet,并重写其所有的抽象方法

    public class ServletTwo extends GenericServlet{

        @Override

        public void service(ServletRequest request, ServletResponse response)  throws ServletException, IOException {}

    }

3.继承javax.servlet.http.HttpServlet

    public class ServletFour extends HttpServlet {

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

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

    }

    (1).doGet()处理get请求

    (2).doPost()处理post请求

    注:用此方法实现的Servlet只能处理http协议的请求


二,配置Servlet

    通过以上方式定义好了一个Servlet,但此时的Servlet还不能处理客户端请求,因为没有给此Servlet指定处理来自客户端的那个请求,因此要把此Servlet配置成能处理客户端请求的Servlet。在WebContent/WEB-INF/web.xml中配置如下: 

    <servlet>

        <servlet-name>one</servlet-name>

        <servlet-class>com.web.servlet.ServletOne</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>one</servlet-name>

        <url-pattern>/one</url-pattern>

    </servlet-mapping>

    一个<servlet>标签就把一个Servlet和一个名字绑定在了一起,一个<servlet-mapping>标签就把一个servlet名字和一个路径绑定在了一起,因此经过此配置客户端就可以通过访问  http://localhost:8080/项目名/one  这一个路径来访问 com.web.servlet.ServletOne 这个Servlet。当然一个<servlet-mapping> 标签也可以有多个<url-pattern>标签,来给一个Servlet绑定多个访问路径,如:   

            <servlet-mapping>

            <servlet-name>TServlet</servlet-name>

            <url-pattern>/login</url-pattern>

            <url-pattern>/log</url-pattern>

            </servlet-mapping>

也可以在<servlet-mapping>标签中使用通配符*来指定访问路径,但是*不能出现在路径的中间位置如:

            <url-pattern>/servlet/*</url-pattern>    对的          

            <url-pattern>*.do</url-pattern>          对的

    <url-pattern>/*.do</url-pattern>         错的

    那么就会出现一个地址同时匹配一个精确的<url-pattern>和一个使用了通配符的<url-mapping>,此时会优先选择精确<url-mapping>所绑定的Servlet。


三,域对象

    域对象是指在一定作用域被共享的对象,在Servlet中有四大域对象:ServletContext,HttpSession,ServletRequest,PageContext,注意:PageContext是jsp的九大内置对象之一,因为jsp是一个特殊的Servlet,故这里将PageContext也算在内。域对象通用的操作属性的方法为:

    void setAttribute(String name,Object obj)   网域对象中保存一个属性

    Object getAttribute(String name)            从域对象中获取一个属性值

    void removeAttribute(String name)           从域对象中移除一个属性


四,获取资源文件

1.获取资源的真实路径:

    ServletContext context = getServletContext()

    String path = context.getRealPath("/a.txt")

2.获取资源流:

    InputStream in = context.getResourceAsStream("/a.txt")

注:以上参数必须以 / 开头,表示相对于项目

3.获取类路径下的资源

    对于web项目来说,当把项目发布后就没有 src 这个目录,所以在拿类路径下的资源文件时,就不能用 new InputStream("") 这种方式来获取。此时src目录就相当于WebContent/WEB-INF/classes目录,可以用两种方式来获取

    (1).类.getResourceAsStream(String path)

        path以 / 开头表示路径相对于 classes

        path不以 / 开头表示路径相对于当前类

    (2).类.getClassLoader().getResourceAsStream(String path)

        此时path只想对于classes










向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI