如何将 servlet 添加到 spring 框架 java Web 应用程序?
How do I add a servlet to spring framework java web application?
我认为这会非常简单,但显然我遗漏了一些东西,而且我似乎无法弄清楚它是什么。
我正在尝试将 servlet 添加到使用 java 和 spring 编写的现有 Web 应用程序。这是我所做的:
我在 web.xml 中添加了以下内容:
<servlet>
<servlet-name>SettingServlet</servlet-name>
<display-name>SettingServlet</display-name>
<description>Provides a rest endpoint for getting and setting settings.</description>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/SettingServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SettingServlet</servlet-name>
<url-pattern>/setting/*</url-pattern>
</servlet-mapping>
然后我创建了以下文件 (.../WEB-INF/SettingServlet-servlet.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
>
<bean id="settingController"
class="com.my.package.path.SettingController"
p:settingService-ref="settingService"/>
</beans>
然后我创建了以下控制器(com.my.package.path.SettingController.java):
@Controller
@RequestMapping("/setting")
public class SettingController {
private SettingService settingService;
public void setSettingService(final SettingService settingService) {
Validate.notNull(settingService, "SettingController::settingService cannot be null");
this.settingService = settingService;
}
@ResponseBody
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
@Secured({ "ROLE_ADMINISTRATOR", "ROLE_CURIOUS_GEORGE" })
public ResponseEntity<String> getSettingRequest(@PathVariable("name") final String name, @RequestParam("setting_family") final String settingFamily) {
final String jsonBody = "{\"setting\":\"" + name + "\", \"Setting Family\":\"" + settingFamily + "\", \"value\":\"test\"}";
return new ResponseEntity<String>(jsonBody, HttpStatus.OK);
}
}
我做错了什么? :( 我在 /setting/fruit?setting_family=foods
尝试执行 GET 请求时收到 404 not found 异常
当您向您的调度程序声明 url 模式为“/setting/*”,然后在控制器中您将“/setting”声明为该控制器的根 requestMapping,您应该能够访问您的控制器使用这个 url: /setting/setting/fruit?setting_family=foods
:)
我认为这会非常简单,但显然我遗漏了一些东西,而且我似乎无法弄清楚它是什么。
我正在尝试将 servlet 添加到使用 java 和 spring 编写的现有 Web 应用程序。这是我所做的:
我在 web.xml 中添加了以下内容:
<servlet>
<servlet-name>SettingServlet</servlet-name>
<display-name>SettingServlet</display-name>
<description>Provides a rest endpoint for getting and setting settings.</description>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/SettingServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SettingServlet</servlet-name>
<url-pattern>/setting/*</url-pattern>
</servlet-mapping>
然后我创建了以下文件 (.../WEB-INF/SettingServlet-servlet.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
>
<bean id="settingController"
class="com.my.package.path.SettingController"
p:settingService-ref="settingService"/>
</beans>
然后我创建了以下控制器(com.my.package.path.SettingController.java):
@Controller
@RequestMapping("/setting")
public class SettingController {
private SettingService settingService;
public void setSettingService(final SettingService settingService) {
Validate.notNull(settingService, "SettingController::settingService cannot be null");
this.settingService = settingService;
}
@ResponseBody
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
@Secured({ "ROLE_ADMINISTRATOR", "ROLE_CURIOUS_GEORGE" })
public ResponseEntity<String> getSettingRequest(@PathVariable("name") final String name, @RequestParam("setting_family") final String settingFamily) {
final String jsonBody = "{\"setting\":\"" + name + "\", \"Setting Family\":\"" + settingFamily + "\", \"value\":\"test\"}";
return new ResponseEntity<String>(jsonBody, HttpStatus.OK);
}
}
我做错了什么? :( 我在 /setting/fruit?setting_family=foods
尝试执行 GET 请求时收到 404 not found 异常当您向您的调度程序声明 url 模式为“/setting/*”,然后在控制器中您将“/setting”声明为该控制器的根 requestMapping,您应该能够访问您的控制器使用这个 url: /setting/setting/fruit?setting_family=foods :)