servlet基础是什么

发布时间:2021-10-19 16:01:05 作者:柒染
来源:亿速云 阅读:124

servlet基础是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

什么是servlet

Servlet是在服务器上运行的一个小程序,一个servlet就是一个java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的servlet程序。如下图所示: servlet基础是什么

比如说浏览器去访问部署在tomcat中的项目,既然是访问,总得有一个访问地址,而且访问后要处理的事情处理完了也需要将该返回的东西给到浏览器,那么这个地址是怎么样的呢?或者说这个请求是谁处理的呢?这里就需要使用到servlet的了,也就是servlet是用来接收浏览器的请求并且最后将结果返回的那一道处理程序。

servlet是javaWeb的三大组件之一,另外两个是Filter(拦截器),Listener(监听器)

tomcat容器等级

tomcat的容器分为四个等级,分别是container容器->engine容器->host(也就是主机容器)->servlet容器,等级是从大到小,也就是前面的容器时包含后面的容器,servlet容器管理context容器,一个context(上下文)对应一个web工程

编写一个简单的servlet的步骤

eclipse中创建一个servlet

添加servl-api.jar包

如果使用第一种方式建立的servlet显示没有导包或者第二种方式时搜索servlet没有结果则说明是没有添加Servlet-api.jar包。 添加方式有两步:

在idea中创建一个servlet

参考文章

servlet的生命周期

从方法层面上看

主要是三个方法 init->service->destory

当tomcat启动时创建servlet实例

上面已经说过在默认情况下,servlet实例是在第一次访问的时候被创建的,也就是说即使tomcat服务器已经启动了,但是只要没有请求过来那么servlet实例还是不会被创建,不过这一点是可以自己修改的,可以在web.xml中修改:

<servlet>
    <!--servlet的名字-->
    <servlet-name>ServletDemo</servlet-name>
    <!--具体的servlet的类-->
    <servlet-class>servletPackage.ServletDemo</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

需要注意的是load-on-startup这个标签的值必须是大于等于0的整数,所有添加了该标签的servlet,都会在tomcat启动时创建,该元素的值是一个序号,tomcat会使用这个序号给多个servlet排序,然后在tomcat启动时会按照这个顺序来创建servlet的实例对象。

ServletConfig

在使用HttpServlet时会有两个init方法,其中一个含有ServletConfig参数,ServletConfig主要有四个方法,其中有两个方法是获取初始化参数的:分别是getInitParameter和getInitParameterNames

String getServletName();
ServletContext getServletContext();
String getInitParameter(String var1);
Enumeration<String> getInitParameterNames();

初始化参数

上面讲到ServletConfig中有两个方法是获取初始化参数的,那么什么是初始化参数呢?其实就是在servlet标签中的init-param标签里面配置的值:

<servlet>
    <!--servlet的名字-->
    <servlet-name>ServletDemo</servlet-name>
    <!--具体的servlet的类-->
    <servlet-class>servletPackage.ServletDemo</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>1341234</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>helloworldnas</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

上面的配置文件中在servlet标签里面配置了两个init-param,里面配置的就是初始化参数。(这里只是示例,初始化参数一般在框架中使用的比较多)

获取初始化参数

@Override
public void init(ServletConfig config) throws ServletException {
    String username = config.getInitParameter("username");
    String password = config.getInitParameter("password");
    System.out.println(username + "," + password);
    super.init(config);
}

上面的代码就是在init方法里面通过servletConfig对象获取配置的参数。

servlet路径匹配

关于url-pattern路径匹配有三种方式:

  1. 完全路径匹配 以/开头 比如 /aaa /aaa/bbb

  2. 目录匹配 以/开头 比如 /aaa/* /*

  3. 扩展名匹配 不能以 /开头 例如 *.do, *.action

优先级:完全路径匹配>目录匹配>扩展名匹配

servletContext

既然servletContext是全局的一个对象,那么就可以配置全局的参数,之前在servlet标签里面配置过init-param,但是那里面的参数只是针对那一个servlet有用,如果想要所有的servlet都可以用,那么就需要配置在servletContext中:

<context-param>
    <param-name>username</param-name>
    <param-value>13412432</param-value>
</context-param>
<!--servlet与servlet-mapping一定是成对出现的,servlet标签是配置servlet处理的类,但是访问规则并没有配置,所以就需要使用servlet-mapping标签来配置-->
<servlet>
    <!--servlet的名字-->
    <servlet-name>ServletDemo</servlet-name>
    <!--具体的servlet的类-->
    <servlet-class>servletPackage.ServletDemo</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>1341234</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>helloworldnas</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

从上面的配置文件中可以看到在context-param中配置的就是全局的servletContext中的值,然后在ServletContext对象中获取,该对象可以从ServletConfig中得到,当然也可以从父类的getServletContext方法中直接获取:

public void init(ServletConfig config) throws ServletException {
    ServletContext servletContext = config.getServletContext();
    String username = servletContext.getInitParameter("username");
    System.out.println(username);
    super.init(config);
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. Java Servlet是什么
  2. Java中servlet是什么

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

servlet

上一篇:怎样读取本地二进制文件到String字符串中

下一篇:html5+java如何实现大文件上传

相关阅读

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

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