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