我在将其部署到Weblogic12C后访问示例springBoot应用程序时遇到问题。使用springBoot嵌入式Tomcat服务器可以正常工作。
重现的步骤:获取springBoot"开始使用"应用程序代码遵循以下步骤:https://spring.io/guides/gs/spring-boot/
此时,您可以通过运行gradle" bootRun"来验证一切顺利。在嵌入式Tomcat服务器中启动应用程序的任务。一旦tomcat启动,浏览到localhost:8080 /并看到你得到#34;来自Spring Boot的问候!"
java版" 1.7.0_45" Java(TM)SE运行时环境(版本1.7.0_45-b18) Java HotSpot(TM)服务器VM(构建24.45-b08,混合模式)
此时,您将看到应用程序部署正常: - 点击"部署"再次看到你的完成" springBoot应用程序已列出并处于ACTIVE状态 - 点击"完成"并在此页面上注意:" Context Root:/ complete"。注意:weblogic文档说如果weblogic.xml中没有定义上下文根,那么它使用war文件的名称(减去.war)
如果您尝试在localhost:7001 /完成访问springBoot应用程序,则会获得403 !!!
Error 403--Forbidden
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.4.4 403 Forbidden
The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.
好的,让我们做一个最后的改变(我在这里钓鱼,也许weblogic真的想要一个weblogic.xml):
编辑weblogic.xml以包含:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
<wls:weblogic-version>12.1.1</wls:weblogic-version>
<wls:context-root>testApp</wls:context-root>
</wls:weblogic-web-app>
现在返回你的weblogic控制台(localhost:7001 / console)
403还在那里。所以:
在上面的示例代码中,打开文件gs-spring-boot \ complete \ src \ main \ java \ hello \ HelloController.java并替换:
@RequestMapping("/")
用这个:
@RequestMapping("pierre.htm")
现在,如果您浏览(记住weblogic.xml将context-root定义为/ testApp):
如果您使用&#34; gradle bootrun&#34;尝试使用tomcat,您可以很好地使用:localhost:8080 / pierre.htm(你得到#34;来自SpringBoot的问候!&#34;)
因此,这会产生以下提示:
这就是我被困的地方......任何人都可以想到JavaConfig&#34;接线&#34;我错过了让它在Weblogic上运行?任何帮助非常感谢。谢谢!
如果有人来到这里,为了使其简单而不是阅读下面的所有评论,请按照以下方式进行操作:
更新WebInitializer类,以便它实现WebApplicationInitializer。所以改变它:
public class WebInitializer extends SpringBootServletInitializer {
对此:
public class WebInitializer extends SpringBootServletInitializer implements WebApplicationInitializer {
创建一个新文件src / main / webapp / WEB-INF / weblogic.xml并将此内容放入其中:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
<wls:weblogic-version>12.1.1</wls:weblogic-version>
<wls:context-root>helloApp</wls:context-root>
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>org.slf4j.*</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
</wls:weblogic-web-app>
从SpringBoot示例应用开始,然后选择&#34;完成&#34;来自这里的解决方案:spring.io/guides/gs/convert-jar-to-war /
从org.springframework.boot.context.web.SpringBootServletInitializer获取所有代码并将其复制到HelloWebXml中,但更改以下行:
受保护的SpringApplicationBuilder configure(SpringApplicationBuilder应用程序){ 退货申请; }
对此:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
创建一个新文件src / main / webapp / WEB-INF / weblogic.xml并将此内容放入其中:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
<wls:weblogic-version>12.1.1</wls:weblogic-version>
<wls:context-root>helloApp</wls:context-root>
<wls:container-descriptor>
<wls:prefer-application-packages>
<wls:package-name>org.slf4j.*</wls:package-name>
</wls:prefer-application-packages>
</wls:container-descriptor>
</wls:weblogic-web-app>
注意:这里有类似的问题: Deploy Spring Boot app in Weblogic ...但是另一个问题是关于部署而且它有点模糊(部署本身对我来说很好)
答案 0 :(得分:3)
Weblogic的问题在于它寻找一个直接实现WebApplicationInitializer
来加载上下文的类。你可能会扩展SpringBootServletInitializer
。尝试
创建一个实现WebApplicationInitializer
并在其中复制SpringBootServletInitializer
内容的类(您还需要从spring源复制一个包级别类,因此您的自定义类可以看到它,就我而言记住)。
答案 1 :(得分:3)
Evgeni的解决方案非常有效。但我有所改善。
您可以继续扩展它,而只需添加一个冗余的&#34;实现WebApplicationInitializer&#34;而不是获取SpringBootServletInitializer和ErrorPageFilter的副本。到你的班级:
@Configuration
@EnableJpaRepositories
@EnableAutoConfiguration
@ComponentScan("nz.co.myapp")
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {
/** Used for running in war */
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
答案 2 :(得分:-1)
类型为Application的Redundant superinterface WebApplicationInitializer,已由SpringBootServletInitializer定义