Spring MVC你好世界

时间:2012-01-11 15:58:50

标签: spring-mvc web

首先,我想为可能重复的主题道歉,但我无法找到问题的答案。

我尝试开始学习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进行映射),这是我的开始。

1 个答案:

答案 0 :(得分:0)

带注释:

在dispatcher-servlet.xml中:

添加这些导入:

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>

这将确保向您的用户显示的链接不会告诉他们文件名。