手记

Xml参数详解----JavaWeb学习笔记(一)

现在在JavaWeb开发中,倾向于将常量信息写于某个配置文件中,这样做好处是当需求变化时,只需要修改一下配置文件就可以了,不用修改源程序,不用重新编译,维护方便。

初始化参数(init-param)

初始化参数(init-param)位于web.xml文件的<servlet>标签下,一个Servlet可以配置0到多个初始化参数。
下面看一个例子:利用初始化参数(init-param)进行权限控制。
本实例存在四个页面:index.jsp(登录页面) ,InitParamServlet(权限判断),notice.html(放入/WEB-INF目录下,该目录下文件不能直接访问),web.xml文件(配置文件)。

index.jsp源码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>登陆后查看机密文件</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <form action="servlet/InitParamServlet" method="post">
        登陆后查看机密文件<br>
        <label>账号:</label>
        <input type="text" name="username"><br>
        <label>密码:</label>
        <input type="password" name="userpw"><br>
        <input type="submit" value="登录">
        <p>悄悄告诉你:账号密码都是admin</p>
    </form>
  </body>
</html>
InitParamServlet源码:
package com.javaweb.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class InitParamServlet extends HttpServlet{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        String name = req.getParameter("username");
        String passw = req.getParameter("userpw");

//      获取初始化参数方法 getInitParameterNames 
        Enumeration params = this.getInitParameterNames();

        while(params.hasMoreElements()){
            //获取初始化参数名 即用户名
            String nameParam = (String) params.nextElement();
            //获取密码 getInitParameter方法获取参数值
            String passwParam = this.getInitParameter(nameParam);
            if(name.equals(nameParam)&&passw.equals(passwParam)){
                req.getRequestDispatcher("/WEB-INF/notice.html").forward(req, resp);
                return;
            }
        }
        req.getRequestDispatcher("/index.jsp").forward(req, resp);
    }
}
notice.html源码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>这是一个机密网页</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>

  <body>
    恭喜你,进入内部页面! <br>
    此页面存放于<b>/WEB-INF</b> 下<br>
    幸运的人,请点击<a href="http://codinghjy.coding.me">传送门</a>

  </body>
</html>
web.xml配置源码:
   <servlet>
    <servlet-name>InitParamServlet</servlet-name>
    <servlet-class>com.javaweb.servlet.InitParamServlet</servlet-class>
     <!-- 初始参数列表 -->
     <init-param>
        <param-name>admin</param-name>
        <param-value>admin</param-value>
     </init-param>
     <init-param>
        <param-name>codinghjy</param-name>
        <param-value>codinghjy</param-value>
     </init-param>
     <init-param>
        <param-name>123456</param-name>
        <param-value>123456</param-value>
     </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>InitParamServlet</servlet-name>
    <url-pattern>/servlet/InitParamServlet</url-pattern>
  </servlet-mapping>

当我们需要控制用户权限时,可以直接在web.xml文件中进行增加和删除用户,不用修改源代码。

上下文参数(context- param)

初始化参数(init-param)只属于其servlet的参数,并不是全局参数,而上下文参数(context-param)属于全局参数,可以被所有servlet访问。
我们可以通过
ServletContext servletContext = getServletConfig().getServletContext();
获取上下文,然后使用
servletContext.getInitParameter("")获取参数。

2人推荐
随时随地看视频
慕课网APP