Tôi đã viết một ứng dụng Spring MVC thực sự đơn giản. Tôi xin lỗi vì tôi khá mới với Spring MVC nên chịu đựng tôi.Bản đồ servlet SpringMVC
Các web.xml như sau
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
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">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
câu hỏi đầu tiên của tôi là, tôi có một trang jsp để đăng nhập với đoạn mã sau ...
<form action="/login" method="post" >
Username : <input name="username" type="text" />
Password : <input name="password" type="password" />
<input type="submit" />
</form>
Điều này cho phép 404 nhưng trong Bộ điều khiển của tôi, tôi đã ánh xạ bộ điều khiển đến/đăng nhập bằng mã bên dưới ...
@Controller
public class LoginController {
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String home(Locale locale, Model model, String username, String password) {
if(username.equalsIgnoreCase("david"))
{
logger.info("Welcome home! the client locale is "+ locale.toString());
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
else
{
return "void";
}
}
}
Sự hiểu biết của tôi là @requestm apping nên làm bản đồ servlet hơn là trong web.xml, điều này có đúng không? Giá trị của /WEB-INF/spring/appServlet/servlet-context.xml cũng được hiển thị bên dưới nếu cần.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="org.david.myapp" />
</beans:beans>
Vì vậy, câu hỏi đầu tiên của tôi là: được ánh xạ servlet thực hiện trong web.xml hoặc tại @requestmapping trong lớp điều khiển?
Câu hỏi thứ hai: cách tốt nhất để kiến trúc sư này có nhiều trang hơn, liệu tôi có nên tiếp tục thêm vào webxml không? Tôi có nên tạo bộ điều khiển cho mọi url không? Tôi có nên tạo một ngữ cảnh servlet cho mỗi url không?
Cảm ơn bạn đã đọc :)
tôi didnt kiểm tra toàn bộ điều bạn đã cho, nhưng trên một cái nhìn đầu tiên phương pháp yêu cầu của bạn trên bộ điều khiển là GET, nơi hình thức của bạn sử dụng một phương thức POST. Có vẻ là một sai lầm ... – Omnaest
ah, cảm ơn bạn đã thay đổi nhưng vẫn cùng một vấn đề, chỉnh sửa mã ở trên để phản ánh điều này. – david99world