【问题标题】:I want to read the parameters of tomcat context.xml我想读取tomcat context.xml的参数
【发布时间】:2016-12-19 17:25:44
【问题描述】:

我想获取 context.xml 中的 companyName 值 编写下面提到的代码后,我得到了null

请帮助我从context.xml 获取价值。你甚至可以告诉你从context.xml获得价值的其他方式

注意:不要说在web.xml中写参数

Context.xml (Tomcat 7)

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
<Parameter name="companyName" value="My Company, Incorporated"
          override="false"/> 

</Context>

JSP(index.jsp)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
ServletContext sc= getServletContext();
String testNameValue = sc.getInitParameter("companyName");
%>
<input type="text" value="<%=testNameValue%>">
</body>
</html>

输出

在实施下面给出的解决方案后更新

异常来了

Exception

【问题讨论】:

  • 您想再次获得哪个值?什么不起作用?尝试创建一个minimal reproducible example
  • 我无法在 tomcat 8 上使用完全相同的代码进行复制
  • 在 Tomcat 中有一个 context.xml,其中我有一个参数作为 companyName 有一些值..在 jsp 中我想要那个值但我没有得到正确的值,我得到 null 为值,请使用tomcat 7

标签: java tomcat


【解决方案1】:

您不能以这种方式加载,因为context.xml 是 JNDI 资源。请尝试以下方法:

Tomcat (context.xml)

&lt;Parameter name="companyName" value="My Company, Incorporated" override="false"/&gt;

Java 端

InitialContext context = new InitialContext();
Context xmlNode = (Context) context.lookup("java:comp/env");
String companyName = (String) xmlNode.lookup("companyName");

弹簧侧 HomeController.java

@Controller
@RequestMapping("/")
public class HomeController {

    @Autowired
    private ServletContext servletContext;

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(ModelAndView mav) throws Exception {
        String companyName = servletContext.getInitParameter("companyName");
        mav.setViewName("home/index");
        mav.addObject("companyName", companyName);
        return mav;
    }

    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }
}

查看面 index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Home</title>
    </head>
    <body>
        <c:out value="${companyName}"/>
    </body>
</html>

上面的例子在我看来是成功的。我的脚本可以在运行时从context.xml 文件中读取,如图所示。

【讨论】:

  • javax.servlet.ServletException: javax.naming.NameNotFoundException: 名称 [companyName] 未绑定在此上下文中。找不到 [公司名称]。 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912) ......有关更多信息,请参阅上面的上传图片
  • 这是 Spring MVC,我想用简单的 Web 应用程序在 jsp 中使用 scriplets。如果你能帮忙。谢谢x
  • 你犯了一个错误。这不是“”而是“”!!如果我们指定“
  • 根据@Laurent.B 的评论,此答案不正确
【解决方案2】:
<Environment name="companyName" value="My Company, Incorporated" 
type="java.lang.String" override="false"/>

对我来说比 Parameter 更好,因为后者正在抛出 javax.naming.NameNotFoundException: Name [companyName] is not bound in this Context. Unable to find [companyName]. 尝试使用 String companyName = (String) xmlNode.lookup("companyName"); 获取值时

【讨论】:

  • &lt;Parameter&gt;&lt;Environment&gt; 元素有什么区别?环境似乎有效,但 Tomcat 8 中的参数不适合我
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2018-09-11
  • 2015-09-09
相关资源
最近更新 更多