首先,我想为可能重复的主题道歉,但我无法找到问题的答案。
我尝试开始学习Spring MVC 3.0。
我喜欢Netbeans IDE(使用7.0.1)我发现了几个教程,但作为一个新手我很困惑,因为有些使用注释和一些属性XML。我理解MVC架构的概念。但是不了解xml设置。
我想要实现的是从index.htm(.jsp?)迁移到HelloWorldPage.htm。
的index.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome to Spring Web MVC project</title>
</head>
<body>
<p>Hello! This is the default welcome page for a Spring Web MVC project.</p>
<a href ="HelloWorldPage.htm">Hello</a>
</body>
</html>
HelloWorldPage.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello!</h1>
</body>
</html>
HelloWorldController.java
public class HelloWorldController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("HelloWorldPage");
return model;
}
}
分配器一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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<!--
Most controllers will use the ControllerClassNameHandlerMapping above, but
for the index controller we are using ParameterizableViewController, so we must
define an explicit mapping for it.
-->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<!--
The index controller.
-->
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
</web-app>
项目结构:
我无法发布图片。但我使用标准的netbeans结构。包控制器和jsp文件中的HelloworldController.java位于web-inf / jsp /
下有人能解决这个问题吗?我理解基本的交互,但缺少xml bean等。
我非常绝望,我正在考虑使用struts而不是spring。问题是我必须创建访问数据库的web(我想我使用hibernate进行映射),这是我的开始。
答案 0 :(得分:0)
添加这些导入:
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
还将它们添加到schemaLocation列表中:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
然后你需要告诉servlet你想要使用注释, 可以通过添加:
来完成<mvc:annotation-driven/>
接下来,您需要告诉他应该扫描控制器:
<context:component-scan base-package="ui.controller" />
(&#34; ui.controller&#34;是我通常使用的,随意使用你喜欢的东西。)
您需要添加刚刚在servlet中定义的位置。 所以创建一个新包,对我来说它将被称为&#34; ui.controller&#34;。
然后将java类添加到该文件夹,即Controller。 我将其称为&#34; HelloWorldController&#34;。
添加注释以确保调度程序知道该类是控制器。
@Controller
public class HelloWorldController{ ... }
您愿意做的下一步是定义何时使用此控制器,因为您可以使用多个控制器。您可以通过定义何时使用此控制器中的单个方法来更具体。
为此,您将使用注释:
@RequestMapping("/HelloWorldPage")
protected ModelAndView showHelloWorldPage(){
return new ModelAndView("HelloWorldPage")
}
现在,您将lnk发送到您使用&#34; RequestMapping&#34;定义的位置。注释方法showHelloWorlPage将被调用。
您甚至可以将请求映射更改为完全不同的内容,例如&#34; pageA&#34;
@RequestMapping("/PageA")
protected ModelAndView showHelloWorldPage(){
return new ModelAndView("HelloWorldPage")
}
不存在并从您的视图中调用该页面:
<a href ="PageA.htm">Hello</a>
这将确保向您的用户显示的链接不会告诉他们文件名。