对springMVC框架项目的学习与解析
看到一句话自勉:程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。
今天我要整理的是现在项目用的框架SpringMVC,之前提到了他的优势,减少了配置文件的书写,下面就说下自己搭建框架的过程(推荐大家学习下Spring in action):
先来看一张流程图:
首先web.xml下配置DispatcherServlet(之前的建项目,导包不在说):
<!-- 配制spring分发器servlet -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>创建控制器HomeController:
public class HomeController extendsAbstractController {
protectedModelAndViewhandleRequestInternal(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
System.out.println("hello world");
returnnew ModelAndView("index");
}
}
配置WEB-INF下的action-servlet.xml文件:
<!-- 控制器-->
<bean name="/home.action"class="cn.itcast.springmvc.controller.HomeController">
</bean>
<!-- 内部资源视图解析器-->
<bean id="internalResourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀-->
<property name="prefix"value="/WEB-INF/jsps/"/>
<!-- 后缀-->
<property name="suffix"value=".jsp"/>
</bean>提到处理器映射,我们说下一般有哪些:(bean名url处理器映射,简单url处理器映射,控制器类名处理器映射)
<!--bean名url处理器映射-->
<beanid="beanNameUrlHandlerMapping"class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="order"value="1" />
</bean>
<!-- 简单url处理器映射-->
<beanid="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<prop key="/bbb.action">helloController</prop>
</props>
</property>
<propertyname="order" value="2" />
</bean>
<!-- 控制器类名处理器映射 -->
<beanid="controllerClassNameHandlerMapping"class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="order"value="3" />
</bean>
还有就是控制器Controller的几种:* 需要继承AbstractCommandController类,并重写handle方法
* 通过构造方法注册命令类和命令名称,如:
publicMyCommandController(){
//注册命令类
this.setCommandClass(Person.class);
//命令名称
this.setCommandName("person");
}
* 需要继承SimpleFormController类,并重写doSubmitAction方法
* 通过构造方法注册命令类和命令名称,如:
publicMyFormController(){
this.setCommandClass(Person.class);
this.setCommandName("person");
}
* 在spring配置文件中对表单控制器进行配置,如:
<!--表单控制器 -->
<beanid="myFormController" name="/form.action" class="cn.itcast.controller.MyFormController">
<propertyname="successView" value="success"/>
<propertyname="formView" value="personForm"/>
</bean>
* 需要继承AbstractWizardFormController类,并重写processFinish方法
*通过构造方法注册命令类和命令名称,如:
publicMyWizardFormController(){
this.setCommandClass(Person.class);
this.setCommandName("person");
}
* 在spring配置文件中对向导表单控制器进行配置,如:
<!-- 向导表单控制器 -->
<bean name="/wizard.action" id="myWizardFormControlle" class="cn.itcast.controller.MyWizardFormController">
<propertyname="pages">
<list>
<value>wizard/1</value>
<value>wizard/2</value>
<value>wizard/3</value>
</list>
</property>
</bean>
dao:@Repository service:@Service controller:@Controller
我们说不按照struts.xml方法配置方法跳转,那如何实现页面和方法的跳转那,springMVC则采用方法体上通过注解将前台方法体和后台执行绑定:
@requestMap(value="")在value中填写方法路径和方法名,其中还可以设置方法接受的方法methed,就是表单的get,post方法,同时我们还把所有视图的跳转都交给控制器,就是原本前台可以直接跳转的,我们也要过一次后台处理,一是通过后台加载数据,二是方便实现权限控制,将用户的所有操作都控制在服务器端,这个是权限粗粒度控制的优势。跳转有了,怎么加载跳转后的视图,就是肯定有新的url产生,这里就有新的类,ModelAndView这个类就是存放跳转后的url,以及要加载的数据。实战后,我想说,大家一定要注意ModelAndView类引包问题,我们使用的是Spring.servlet包,具体的我没记不清楚,但确实我多次错入这个误区,而且这个bug很难找,所以希望后来者小心,细心,多心。
还有一点我觉得需要记下,就是我们以前采用struts+hibernate+spring框架时,通常会对前台页面做伪静态化处理,这样做的好处在提高网站速度,方便搜索引擎优化调用,再个就是网站稳定性得到提升。之前ssh框架就用了urlrewrite框架做伪静态化处理,现在我们其实就不用这个技术来做,springMVC运行后,除第一次编译需要花费时间,剩下就会生成静态化。还有我们网站经常喜欢隐藏自己所用的技术,我们也经常看到网站大部分页面都是html结尾,这个我们就可以用框架来做,将类似action动作用html来代替,就是我们每个action都是以html结尾。
最后,每一个框架的重用都是对项目完善的分析,以及开源背后的强大,对于开发者,熟悉框架的最好方法就是边用边学习,不停的coding,从调试中就会学到框架带出来的快乐和忧愁,好,今天就这样。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。