初识spring web mvc

因项目需要,需要使用spring web mvc。特从nebeans 官网上找到一个简单mvc应用程序的构建向导http://netbeans.org/kb/docs/web/quickstart-webapps-spring.html,自己动手建了一下。特写此总结。

首先在web.xml文件中有如下几行:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
即把所有匹配*.htm的请求全交给dispatcher处理,当然一次刷新也算一次请求。

然后在dispatcher-serclet.xml文件中配置参数,告诉dispatcher怎样处理请求,内容如下:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
</props>
</property>
</bean>
将请求index.htm映射给indexController处理,至于indexController怎么处理,那就得看它的功能了。它的注册如下:
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewContr oller"
p:viewName="index" />
上述代码将indexController注册为org.springframework.web.servlet.mvc.ParameterizableViewContr oller的实例。对于index.htm请求,将返回/WEB-INF/jsp/index.jsp页面。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewReso lver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
该代码实现在jsp文件名(如 index)上加一个前缀/WEB-INF/jsp/和加一个后缀.jsp。
  <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandl erMapping"/>该行代码实例化一个类,该类的功能相对而言有点神奇:如果在自己的源代码包里声明的一个或多个controller类(例如:HelloController),它能自动生成对应的映射文件(hellocontroller 对应于hello.htm)。处理原理为:将mypackage.HelloController类的包名去掉,再将末尾的Controller去掉,加上.htm后缀,就生成了对应的映射文件hello.htm,至于Hello为何变成hello,具体我不清楚,可能是忽略大小写吧!
<bean class="com.xuriwuyun.www.controller.HelloController" p:helloService-ref="helloService"/>   该行代码实例化自己的HelloController,并将属性HelloService于实例helloService关联。


下面来看看HelloController类,该类继承于SimpleFormController。构造函数:
  public helloController() {
        setCommandClass(MyCommand.class);     //指定命令类,即传给函数onSubmit的参数command的类型
        setCommandName("myCommand");       //指定命令类在请求中的name
        setSuccessView("successView");         //当初始页面发回请求时返回的页面
        setFormView("formView");                 //该controller收到hello.htm请求响应的初始页面,注意这两个页面都会由viewResolver加上前缀/WEB-INF/jsp/和后缀.jsp
    }

  protected ModelAndView onSubmit(HttpServletRequest request, 
HttpServletResponse response, 
Object command,     //由上面setCommandClass(MyCommand.class)指定的MyCommand类
org.springframework.validation.BindException errors) throws Exception {
        myCommand name = (myCommand) command;
        ModelAndView mv = new ModelAndView(getSuccessView());
        mv.addObject("helloMessage", helloservice.sayHello(name.getValue()));     //加入map的映射消息
        return mv;
    }

来看看/WEB-INF/jsp/formView.jsp文件:
        <h1>Hello World!
            <spring:nestedPath path="myCommand">             //由setCommandName("myCommand")指定的MyCommand类的对象名
                <form action="" method="post">
                    Name:
                    <spring:bind path="value">             //myCommand的属性value
                        <input type="text" name="${status.expression}" value="${status.value}">     //status不清楚
                    </spring:bind>
                    <input type="submit" value="OK">
                </form>
            </spring:nestedPath>
        </h1>

该web应用运行流程如下:
  web.xml -> dispatcher-servlet.xml -> HelloController.java -> formVIew.jsp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值