标签: embedded-tomcat-8

临时上传位置[/tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT]无效

我使用的是Spring Boot 1.5.13版本.

我得到了如下的异常消息.

Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT] is not valid
Run Code Online (Sandbox Code Playgroud)

我在Spring Github Issues中找到了这个问题. https://github.com/spring-projects/spring-boot/issues/9616

但我仍然对此有疑问.

  1. 我没有在我的应用中使用文件上传内容.但是日志说"无法解析多部分servlet请求"为什么会这样?(当我的应用程序使用RestTemplate时,我得到了异常(Post方法)
  2. 为了解决这个异常,我重启了我的应用程序,但它没有立即工作.虽然我重新启动了我的应用程序,但它引用了不存在的tomcat目录.重启后一天,它工作.我想这个目录是在Spring的某个地方缓存的,否则......?

请帮帮我!

spring spring-boot embedded-tomcat-8

20
推荐指数
4
解决办法
2万
查看次数

在spring boot中请求目标中找到无效字符

我的应用程序是从java -jar开始的,版本为1.5.6.RELEASE的spring boot.
我的一个请求的内容具有字符"{".当它被发送到服务器时,引发以下异常:

java.lang.IllegalArgumentException:在请求目标中找到无效字符.有效字符在RFC 7230和RFC 3986中的org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472)中定义,位于org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683)at at Org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:868)org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor. doRun(NioEndpoint.java:1455)位于java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)的org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)atg.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java) :745)

哪里错了?我如何解决它?

编辑1:
我的休息是这样的:

var jsonData = {
                    id: $("#hiddenId").val(),
                    permitNumber: $("#txtPermitNumber").val(),
                    permitToDate: $("#txtPermitToDate").val()
               }
document.location = restUrl + "/print?reportParams= " + JSON.stringify(jsonData);
Run Code Online (Sandbox Code Playgroud)

spring-boot embedded-tomcat-8

19
推荐指数
4
解决办法
1万
查看次数

How to add context.xml file to embedded tomcat server

I'm trying to run my application in an embedded tomcat server using Spring-boot. I'm having my JNDI Resources and Environments configured in an XML file, placed under src/main/webapp/META-INF/context.xml in my application. When I deploy this application in a standard servlet container it works. But when I start it using an embedded server it does not recognize the JNDI resources that are present in the context files.

I tried adding the context file to the embeddedTomcatContainer programatically by using the following …

java spring tomcat spring-boot embedded-tomcat-8

14
推荐指数
1
解决办法
7256
查看次数

@WebServlet注释不适用于Tomcat 8

我想@WebServlet在Tomcat 8上运行的Java EE webapp中使用注释.

我已经读过,我需要在我的Servlet版本3.1中声明,web.xml并且我的Servlet需要扩展HttpServlet.我做了所有这些,但仍然@WebServlet不起作用.我正在获得HTTP 404.

我也试过我的配置用metadata-complete="false"在我web.xml,但还是没有成功.

这是我的web.xml和Servlet.

完整的示例代码可以在GitHub上找到.

web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
  version="3.1" 
  xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

  <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
  </context-param>

  <!-- http://stackoverflow.com/a/7924117/451634 -->
  <!-- Put "-1" to disable this feature -->
  <context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>1</param-value>
  </context-param>

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
  </welcome-file-list>

  <!-- JSF -->
  <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>   

  <!-- CDI -->
  <listener>
    <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
  </listener>

</web-app>
Run Code Online (Sandbox Code Playgroud)

TestServlet.java …

servlets embedded-tomcat-8

13
推荐指数
1
解决办法
2万
查看次数

Tomcat 8,Spring Boot,@ Configurable LoadTimeWeaving没有-javaagent?

我正在尝试设置@Configurable域对象(不是由spring容器管理).
我已经通过添加-javaagent:path/to/spring-instrument.jar作为JVM参数来完成这项工作但是我不能100%清楚这个-javaagent是否必须到位.我在Tomcat 8上运行它.我可能会误解文档,但似乎我可以使用另一种机制来实现这一点,特别是这一行:

不要定义TomcatInstrumentableClassLoader了对Tomcat 8.0高.相反,让Spring InstrumentableClassLoader通过TomcatLoadTimeWeaver策略自动使用Tomcat的新本机设施.

代码示例如下:

@SpringBootApplication
@EnableLoadTimeWeaving
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }   
    @Bean
    public MyService myService(){
        return new MyService();
    }
}
Run Code Online (Sandbox Code Playgroud)
@Configurable
public class MyDomainObject {

    @Autowired
    private MyService myService;

    public MyService getMyService(){
        return myService;
    }
}
Run Code Online (Sandbox Code Playgroud)
 public class MyService {
    private static final Logger log = LoggerFactory.getLogger(MyService.class);

    public void test(){
        log.info("test");
    }
}
Run Code Online (Sandbox Code Playgroud)

那么有没有办法在不指定-javaagent的情况下编织这些@Configrable对象?我有兴趣学习如何在将WAR作为WAR部署到独立Tomcat 8服务器和/或在作为'胖'jar启动时使用嵌入式Tomcat 8服务器时完成此操作. …

aspectj load-time-weaving tomcat8 spring-boot embedded-tomcat-8

13
推荐指数
1
解决办法
1197
查看次数

Spring启动嵌入式tomcat日志

我正在使用spring boot嵌入式tomcat和spring boot 1.5.9,我也使用Log4j2.

最近我加载期间的exerience问题,所以我想更好地了解tomcat日志[不是访问日志],我试过(在application.properties中):

logging.level.org.apache.tomcat: INFO
logging.level.org.apache.catalina: INFO
Run Code Online (Sandbox Code Playgroud)

但上述都没有奏效.有没有其他方法来实现它?

logging spring tomcat8 spring-boot embedded-tomcat-8

13
推荐指数
1
解决办法
2万
查看次数

Spring Boot不尊重@WebServlet

我创建了一个Servlet(从HttpServlet扩展)并按照3.0规范注释

@WebServlet(name="DelegateServiceExporter", urlPatterns={"/remoting/DelegateService"})
Run Code Online (Sandbox Code Playgroud)

@Configuration在Spring Boot中的类扫描这个servlet的包.但是,当我的Spring Boot应用程序启动时,它没有记录它已在嵌入式Tomcat 8.0.15容器中部署此servlet.

所以,我也加入@Component了我的servlet.现在,Spring Boot注册了servlet(向我证明扫描包已正确设置),但随后它使用驼峰大小写基于类名的URL模式进行注册.所以,这更好 - 例如,我注册了一个servlet,但是URL映射错误!

2015-01-05 11:29:08,516 INFO  (localhost-startStop-1) [org.springframework.boot.context.embedded.ServletRegistrationBean] Mapping servlet: 'delegateServiceExporterServlet' to [/delegateServiceExporterServlet/]
Run Code Online (Sandbox Code Playgroud)

如何让Spring Boot自动加载所有带@WebServlet注释的servlet并遵守其url映射?

spring annotations servlet-3.0 spring-boot embedded-tomcat-8

11
推荐指数
3
解决办法
7342
查看次数

无法发布包含许多(超过256个)值的表单

我正在使用Thymeleaf的Spring Boot 1.2.2.我的问题是我尝试在表单中发布一长串项目(一些标签,一个复选框),这些列表不能执行我的列表中的这么多项目.(我测试了小清单并且它有效.)

首先我使用了码头,但收到了错误,其中说:

java.lang.IllegalStateException: Form too many keys
at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:526)
Run Code Online (Sandbox Code Playgroud)

我搜索并看到了这篇文章.结果我补充说

applicationDefaultJvmArgs = ["-Dorg.eclipse.jetty.server.Request.maxFormKeys=8000"]
Run Code Online (Sandbox Code Playgroud)

到我的gradle.build,但它没有成功.结果我切换到Tomcat,它再次失败.错误消息是:

java.lang.IndexOutOfBoundsException: Index: 256, Size: 256
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
Run Code Online (Sandbox Code Playgroud)

看起来它只能执行256个条目.我有大约500个条目.所以我认为增加maxhttpheadersize会有所帮助,并将此行添加到我的application.properties:

server.tomcat.max-http-header-size=-1
Run Code Online (Sandbox Code Playgroud)

(-1为无限制)我在我的Thymeleaf表格中设置method ="post".任何其他方式增加256限制?我不想分页我的结果.谢谢你的帮助.

embedded-jetty thymeleaf spring-boot embedded-tomcat-8

10
推荐指数
1
解决办法
3250
查看次数

代码适用于嵌入式Apache Tomcat 8但不适用于9.有什么改变?

将Apache Tomcat嵌入到eclipse Web应用程序项目中.
当我使用最新的Tomcat 8(8.0.5 Embedded)jar作为依赖项时,代码工作,并且此服务器在http:// localhost:8080响应,但是,它无法以相同的方式启动,并且在此不响应使用最新的Tomcat 9(9.0.5 Embedded)jar时的地址.
代码很简单.我尽可能彻底地研究,但没有弄清楚什么是错的.

package app;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class Main {

    public static void main(String[] args) {

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);

        try {
            tomcat.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }

        tomcat.getServer().await();
    }

}
Run Code Online (Sandbox Code Playgroud)

使用Tomcat 9.0.5 Embedded jar时的控制台输出:

org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
Run Code Online (Sandbox Code Playgroud)

使用Tomcat 8.0.5 Embedded jar时的控制台输出:

org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
org.apache.catalina.core.StandardService startInternal
INFO: …
Run Code Online (Sandbox Code Playgroud)

java tomcat embedded-tomcat-8

10
推荐指数
1
解决办法
2321
查看次数

没有WebApp,WebSockets无法正常工作

这有效:

String webappDir = "...";
context = tomcat.addWebapp("/", new File(webappDir).getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

这不是:

context = tomcat.addContext("/", new File("").getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

webappDir在这个实例中我真的不需要,因为我没有提供任何JSP页面或客户端资源,我只是使用response.getWriter().println(...);服务器端.

抛出没有异常,websocket根本无法打开.

我可以假设这是一个tomcat错误吗?

java bugzilla tomcat embedded-tomcat-8

9
推荐指数
1
解决办法
801
查看次数