根据文档here,它说:
如果您有一个经过修改的web.xml模板,那么您将需要将其迁移到Spring,因为Grails 3.x不使用web.xml(尽管仍然可以在src / main / webapp / WEB中打开该模板) -INF / web.xml)。
的意思是,如果我要合并一个具有web.xml
的第三方专有库,那么我可以将其原封不动地放在src/main/webapp/WEB-INF
中(以及他们放入其后的所有内容tomcat webapp目录),grails将加载它。这种解释正确吗? this的答案似乎暗示了这一点。
我使用react
配置文件(我也尝试过web
配置文件)和一个调用其servlet的网页启动了grails 3应用程序。但是,虽然可以在webapp
中找到一个html文件,但是servlet调用本身返回了404
,我不知道为什么。如果我构建了war文件并部署在独立的tomcat上,则servlet调用可以工作,但是当我这样运行时:
./gradlew server:bootRun --debug
然后没有,我看不到控制台上印有任何有趣的东西。
我需要处理一些URL映射还是application.yml
中的某些内容?
在web.xml中,被调用的servlet如下所示(这只是其中的一小部分):
<servlet>
<servlet-name>DataSourceLoader</servlet-name>
<servlet-class>com.isomorphic.servlet.DataSourceLoader</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataSourceLoader</servlet-name>
<url-pattern>/isomorphic/DataSourceLoader</url-pattern>
</servlet-mapping>
我知道替代方法是使用Beans重写web.xml
并将内容放入resources.groovy
,但我更喜欢一种方法,它需要尽可能少的编码。
[更新]
我已经可以通过以下方式更新我的grails-app/conf/spring/resources.groovy
:
import org.springframework.boot.web.servlet.ServletRegistrationBean
// Place your Spring DSL code here
beans = {
DataSourceLoader(ServletRegistrationBean) { bean ->
servlet = new com.isomorphic.servlet.DataSourceLoader()
urlMappings = ['/isomorphic/DataSourceLoader']
}
}
它似乎正在起作用...尽管如此,我仍然对仅使用web.xml
的方式感兴趣,这是我的原始问题。
答案 0 :(得分:0)
作为从Grails 2.x升级到Grails 3.3的一部分,我以前使用过web.xml来定义第三方servlet。
我使这些servlet可用(并在启动时加载)的方法是通过一个自定义类。因此,您可以像这样在src / java中定义一个自定义类:
Private Sub Rcagayan_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cagayan.CheckedChanged
If Duration.Text = "" Then
MessageBox.Show("Please Select Duration", "WARNING", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End if
If Cagayan.Checked = False Then
Abulug.Checked = False
Allacapan.Checked = False
Alcala.Checked = False
Amulung.Checked = False
Aparri.Checked = False
Baggao.Checked = False
Ballesteros.Checked = False
Buguey.Checked = False
Camal.Checked = False
Claveria.Checked = False
Enrile.Checked = False
Gattaran.Checked = False
Gonzaga.Checked = False
Iguig.Checked = False
Lasam.Checked = False
Lallo.Checked = False
Pamplona.Checked = False
Penablanca.Checked = False
Piat.Checked = False
Rizal.Checked = False
SantaAna.Checked = False
StaTere.Checked = False
Santonino.Checked = False
Praxedes.Checked = False
Sanchez.Checked = False
Solana.Checked = False
Tuao.Checked = False
Tugue.Checked = False
btnUncheckedckbExpectedFalse.PerformClick()
btnAdvicedUnchecked.PerformClick()
Me.btncagayan.PerformClick()
Me.btnTstmFormat.PerformClick()
End If
End Sub
因此,尽管您没有在一个XML文件中定义所有内容,但仍然可以在一个类中定义所有servlet,因此这并不是什么大的改变,我现在已经经历了一次,我更愿意成为能够用代码而不是xml进行定义。希望有帮助!