Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从应用程序级别设置tomcat的relaxedQueryChars_Java_Tomcat - Fatal编程技术网

Java 如何从应用程序级别设置tomcat的relaxedQueryChars

Java 如何从应用程序级别设置tomcat的relaxedQueryChars,java,tomcat,Java,Tomcat,据我所知,在tomcat_folder/conf/server.xml中允许在请求URL中使用特殊字符是可能的,但我需要找到另一种方法从应用程序端设置这些特殊字符(如果可能的话),我的意思是使用web.xml或任何其他方法。在这里,我在查询中启用了“[(开始方括号)和“](结束方括号): <Connector port="8080" protocol="HTTP/1.1" relaxedQueryChars='|[]'

据我所知,在tomcat_folder/conf/server.xml中允许在请求URL中使用特殊字符是可能的,但我需要找到另一种方法从应用程序端设置这些特殊字符(如果可能的话),我的意思是使用web.xml或任何其他方法。在这里,我在查询中启用了“[(开始方括号)和“](结束方括号):

    <Connector port="8080" protocol="HTTP/1.1" relaxedQueryChars='|[]'
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"/>

这工作得很好,如果有人能帮助我在不接触server.xml的情况下进行设置,我将不胜感激

有关应用程序环境的信息: Tomcat版本:7.0.96,
春季:4.1.7.发布

我同意@M.Deinum

不建议使用java代码触摸tomcat的
server.xml
,因为它会阻止其他应用程序正常工作

但是你仍然想做,你可以冒险。

示例Java代码:

import java.io.File;
import java.util.Arrays;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class RelaxedQueryCharsExample {

    public static void main(String[] args)
            throws ParserConfigurationException, SAXException, TransformerException {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        File file = new File("D:/tomcat/conf/server.xml");
        Document document = documentBuilder.parse(file);
        NodeList list = document.getElementsByTagName("Connector");
        for (int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);
            NamedNodeMap map = node.getAttributes();
            if (map.getNamedItem("port").getNodeValue().equalsIgnoreCase("8080") 
      && map.getNamedItem("protocol").getNodeValue().equalsIgnoreCase("HTTP/1.1")) {
                map.getNamedItem("relaxedQueryChars").setNodeValue("|[]");
            }

        }

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        document.setXmlStandalone(true);
        DOMSource source = new DOMSource(document);
        StreamResult result = new StreamResult(file);
        transformer.transform(source,result);
    }

}
导入java.io.File;
导入java.util.array;
导入java.util.List;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.NamedNodeMap;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
公共类RelaxedQueryCharsExample{
公共静态void main(字符串[]args)
抛出ParserConfiguration异常、SAXException、TransformerException{
DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
File File=新文件(“D:/tomcat/conf/server.xml”);
Document Document=documentBuilder.parse(文件);
NodeList list=document.getElementsByTagName(“连接器”);
对于(int i=0;i

注意:在运行tomcat服务器之前运行此代码。在运行之间,这可能会使服务器崩溃。

我同意@M.Deinum

不建议使用java代码触摸tomcat的
server.xml
,因为它会阻止其他应用程序正常工作

但是你仍然想做,你可以冒险。

示例Java代码:

import java.io.File;
import java.util.Arrays;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class RelaxedQueryCharsExample {

    public static void main(String[] args)
            throws ParserConfigurationException, SAXException, TransformerException {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        File file = new File("D:/tomcat/conf/server.xml");
        Document document = documentBuilder.parse(file);
        NodeList list = document.getElementsByTagName("Connector");
        for (int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);
            NamedNodeMap map = node.getAttributes();
            if (map.getNamedItem("port").getNodeValue().equalsIgnoreCase("8080") 
      && map.getNamedItem("protocol").getNodeValue().equalsIgnoreCase("HTTP/1.1")) {
                map.getNamedItem("relaxedQueryChars").setNodeValue("|[]");
            }

        }

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        document.setXmlStandalone(true);
        DOMSource source = new DOMSource(document);
        StreamResult result = new StreamResult(file);
        transformer.transform(source,result);
    }

}
导入java.io.File;
导入java.util.array;
导入java.util.List;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.NamedNodeMap;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
公共类RelaxedQueryCharsExample{
公共静态void main(字符串[]args)
抛出ParserConfiguration异常、SAXException、TransformerException{
DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
File File=新文件(“D:/tomcat/conf/server.xml”);
Document Document=documentBuilder.parse(文件);
NodeList list=document.getElementsByTagName(“连接器”);
对于(int i=0;i

注意:在运行tomcat服务器之前运行此代码。在运行期间,此操作可能会使服务器崩溃。

您无法从单个应用程序更改服务器配置。想象一下,100个应用程序正在运行,每一个模块都是精心设计的
server.xml
。。。如果可以的话,您不应该这样做,因为此配置会影响tomcat中运行的所有应用程序。您不能从单个应用程序更改服务器配置。想象一下,100个应用程序正在运行,每一个模块都是精心设计的
server.xml
。。。如果可以,您不应该这样做,因为这种配置会影响在tomcat中运行的所有应用程序。