Servlet使用预设参数
前言
在上两篇我们都介绍了了工具方面的使用,相信大家对于Servlet是很怀念的。在这一篇,我将会介绍如何在Servlet里面设定预设参数。
预设参数的设定
预设参数的好处不需要多说,其中一个常见的用法是能够让我们在不改程序的情况下改变判断条件。那这边我们可以把它想象成为我们在Asp .net web.config里面的 AppSettings一样概念。
在Servlet里面,预设参数有两个Scope,一种是只有在此Servlet才能够取得到的,和一种是所有的Servlet都可以取得到的。
题外话,我们还没有真的介绍Servlet的Lifecycle,不过Servlet每一个是不受互相干扰的,所以Servlet 1 和 Servlet 2 之间是不知道对方的。 那这边我们会先从Servlet层级的开始看起。
Servlet层级的预设参数设定和使用
在 <Servlet >下面的 <INIT-PARAM >
当我们要设定Servlet层级的预设参数,如果是定义在xml里面,那么就是:
上面表示在TestServlet里面可以取得一个预设参数为name的,它的值是alan。如果有多个参数,则增加多笔<INIT-PARAM> 。
使用Annotation的方式设定
当然,我们也可以使用Annotation的方式设定。好处是一目了然,同时如果之后需要修改,Web.xml里面会比Annotation的优先度高。
上面的Annoation和在xml定义的是同样的意思。
在程序里面呼叫
还记得我们Hello World的例子,假设,今天我要把它修改一下,变成当使用者输入某个特定字符串(这边例子是"alan",从Init paaram里面读取出来),我们会显示一个特殊的页面给他。
首先第一件事情是我们需要一个特殊的页面,那这边我就建立了一个secret.html的文件,里面什么也没有,只有一行字而已,让我们好辨认的确显示的是这个html。

题外话:建立html在WEB-INF的下面是因为在Tomcat里面,WEB-INF里面的东西是不能直接用http取得。一定要透过Servlet来转。 详细内容在之后介绍Tomcat的时候会在提到。 环境准备好了以后,我们这边介绍如何取得Init-Param设定的值。
基本上有两种方法:
使用 getInitParameter("name") - 这边"name"是那个参数的key
使用getServletConfig().getInitParameter("name") - 先取得ServletConfig的对象,在从里面取得。
那有的时候我们会希望取得所有的key然后用回圈去取的所有的值,这个时候getInitParameterNames()就能够取得所有的Key。
因此,最后我们程序代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { .... String name = request.getParameter("name"); String secretName = getInitParameter("name"); if(name.equals(secretName)) { request.getRequestDispatcher("/WEB-INF/Secret.html").forward(request, response); return; } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html >"); .....这边没什么特别的,不过注意到当我们名字和预设参数一样的时候,我们呼叫了一个getRequestDispatcher()的方法,基本上它的意思是把内容转向另外一个页面去继续做处理(这部份之后会介绍到)。
最后结果:


Context-Param - 所有Servlet都可以取得到的预设参数
基本上和Init-Param概念上是一样的,差别在于,Init-param只能那个Servlet取得,而Context-Para是所有Servlet都能够取得,可以把它想成private variable和Global Variable的差别。
在Web.xml设定
和Init-Param很像,不过这次一定要在web.xml里面设定放在root(web-app)的下面:
同样,如果有多笔,就增加多个context-param。
程序里面呼叫
我们这一次的例子是,如果使用者没有输入到关键名字(例子是:"alan"),那么页面显示和上次一样,不过这一次增加一段提示字。而那个提示字我们将使用Context- Param的默认值。
那取得Context-Param就一个方法:
使用 getServletContext().getInitParameter("message") - 先取得ServletContext在取得预设参数
和Init-Param一样,可以呼叫getServletContext().getInitParameterNames()取得所有的全域参数的name。
程序代码如下:
String secretName = getInitParameter("name"); //String secretName = getServletConfig().getInitParameter("name"); //getInitParameterNames() 取得所有init param 的名字 if(name.equals(secretName)) { request.getRequestDispatcher("/WEB-INF/Secret.html").forward(request, response); return; } ... out.println(""); out.println("Hello: " + name); out.println("<BR>"); out.println(getServletContext().getInitParameter("message")); ...实际执行:


结语
预设参数的使用非常广泛,因此希望透过这一篇的介绍大家能够了解如何设定预设参数。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/zh/9869.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Servlet使用预设参数
时间:2020-12-27
-
niubijob一个开源的分布式任
时间:2020-12-27
-
前端学HTTP之安全HTTP
时间:2020-12-27
-
技术培训|资源编排 人人都
时间:2020-12-27
-
AR增强现实开发介绍(续)
时间:2020-12-27
-
一个操作系统的实现(11)让
时间:2020-12-27
热门文章
-
Servlet使用预设参数
时间:2020-12-27
-
一个操作系统的实现(11)让操作系统进入保
时间:2020-12-27
-
前端学HTTP之安全HTTP
时间:2020-12-27
-
技术培训|资源编排 人人都可以成为架构
时间:2020-12-27
-
AR增强现实开发介绍(续)
时间:2020-12-27
-
niubijob一个开源的分布式任务调度框架 安
时间:2020-12-27
