您的位置:首页 > 编程语言 > Java开发

[学习笔记]基于注解的spring3.0.x MVC学习笔记(二)

2010-07-23 14:42 676 查看
用惯了maven管理项目之后会发现自己懒惰了很多,所以决定放弃使用maven去学习spring3的mvc,采用传统的webproject进行学习,好了闲话不说,首先我们需要知道springmvc需要加什么包.

使用到springmvc的需要加入以下依赖包:

org.springframework.aop-3.0.3.RELEASE.jar--------------Spring的切面编程

org.springframework.asm-3.0.3.RELEASE.jar--------------Spring独立的asm程序

org.springframework.beans-3.0.3.RELEASE.jar------------SpringIoC(依赖注入)的基础实现

org.springframework.context-3.0.3.RELEASE.jar-----------Spring提供在基础IoC功能上的扩展服务

org.springframework.core-3.0.3.RELEASE.jar--------------Spring的核心包

org.springframework.expression-3.0.3.RELEASE.jar------Spring表达式语言

org.springframework.web-3.0.3.RELEASE.jar--------------SpringWeb下的工具包

org.springframework.web.servlet-3.0.3.RELEASE.jar-----SpringMVC工具包,并且对JEE6.0Servlet3.0的支持

除了spring的包之外还需要加入以下几个依赖包:

com.springsource.org.aopalliance-1.0.0.jar---------------aop的工具包

com.springsource.org.apache.commons.logging-1.1.1.jar----------commons的日志管理

本文使用了slf4j日志管理,所以需要加入以下包

slf4j-api-1.5.10.jar--------------------------------------------日志管理的增强

slf4j-log4j12-1.5.10.jar---------------------------------------日志包的连接层

所有包如图1springmvc需要的包:

<log4j:configurationxmlns:log4j="http://jakarta.apache.org/log4j/">

<!--Appenders-->
<appendername="console"class="org.apache.log4j.ConsoleAppender">
<paramname="Target"value="System.out"/>
<layoutclass="org.apache.log4j.PatternLayout">
<paramname="ConversionPattern"value="%-5p:%c-%m%n"/>
</layout>
</appender>

<!--ApplicationLoggers-->
<loggername="org.lxh.mvc.controller">
<levelvalue="debug"/>
</logger>

<!--3rdpartyLoggers-->
<loggername="org.springframework.core">
<levelvalue="info"/>
</logger>

<loggername="org.springframework.beans">
<levelvalue="info"/>
</logger>

<loggername="org.springframework.context">
<levelvalue="info"/>
</logger>

<loggername="org.springframework.web">
<levelvalue="info"/>
</logger>

<!--RootLogger-->
<root>
<priorityvalue="info"/>
<appender-refref="console"/>
</root>

</log4j:configuration>[/code]

springmvc.xml

<!--对springorg.lxh包下所有注解扫描-->
<context:component-scanbase-package="org.lxh"></context:component-scan>
<!--支持springmvc新的注解类型详细spring3.0手册15.12.1mvc:annotation-driven-->
<mvc:annotation-driven/>

<!--对模型视图名称的解析,即在模型视图名称添加前后缀,在requestmapping输入的地址后自动调用该类进行视图解析-->
<beanid="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/"/>
<propertyname="suffix"value=".jsp"></property>
</bean>


如果需要使用jstl的话则需要在<property>标签中加入

<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>


prefix:则为前缀,也就是目录的地址,一般以"WEB-INF/xx"为主,若为"/"则为全局使用

suffix:则为后缀,也就是文件名的后缀.使用InternalResourceViewResolver类是只支持jsp,不支持html等其他后缀,如果强制加入其他后缀的话胡出现死循环,至于其他视图的话则以后在使用的时候再介绍

web.xml

<servlet>
<description>ThisisSpringMVCDispatcherServlet</description>
<servlet-name>SpringMVCDispatchServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>SpringContext</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVCDispatchServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


注意:配置spring的DispatcherServlet的时候,如果需要使用自定义名字的spring配置文件的话,需要在<serlvet>中加入<init-param>这个参数,否则的话spring会默认查找web-inf/classes下面以[servlet-name]-servlet.xml的文件,会出现以下错误:

ERROR:org.springframework.web.servlet.DispatcherServlet-Contextinitializationfailed
org.springframework.beans.factory.BeanDefinitionStoreException:IOExceptionparsingXMLdocumentfromServletContextresource[/WEB-INF/SpringMVCDispatchServlet-servlet.xml];nestedexceptionisjava.io.FileNotFoundException:CouldnotopenServletContextresource[/WEB-INF/SpringMVCDispatchServlet-servlet.xml]


HelloWordController.java:

packageorg.lxh.mvc.controller;


importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.servlet.ModelAndView;


@Controller

@RequestMapping("/test")

publicclassHelloWordController{

privateLoggerlogger=LoggerFactory.getLogger(HelloWordController.class);


@RequestMapping("/hello")

publicvoidHello(){

logger.info("Thehello()methodisuse");

}


@RequestMapping("/welcome")

publicStringwelcome(){

logger.info("Thewelcome()methodisuse");

//return"/welcome";

return"/WEB-INF/jsp/welcome";

}


@RequestMapping("/helloWorld")

publicModelAndViewhelloWorld(){

logger.info("ThehelloWorld()methodisuse");

ModelAndViewview=newModelAndView();

//view.setViewName("/helloworld");

//view.setViewName("/WEB-INF/JSP/helloworld");

view.setViewName("/hello");

returnview;

}

}


可以发现上面为什么有那么多注释,

先一个一个来说明,springmvc可以通过以下三种方式链接到视图解析器中,每种方法以requestMapping注解作为跳转.

第一种,使用无返回方法跳转,如果使用返回方法进行跳转的话,则会通过视图解析器进行以prefix(前缀)+方法名+suffix(后缀)组成的页面文件名称.这样的话可能需要用urlwriter框架进行重向地址更改,保证安全性.

第二种,使用一个返回的字符串方法作为跳转,使用字符串跳转的话好处就是在return的时候可以自己指定返回的名字,JSP组成是prefix(前缀)+返回的字符串+suffix(后缀),这样的话跳转的时候外围广很多而且,安全性相对高点

第三种,返回一个ModelAndView类型,ModelAndView是spring2.5经常使用的方式,使用setViewName方法则可以跳转到指定的页面.

在类中还还发现一个Contorller的注解,该注解是用于把当前Java类变成一个Spring里面的一个beans,如果在Class上面加入requestMapping的话,而在方法上还拥有requestMapping,则在浏览器输入的地址为http://访问地址:端口/contextroot/要调用类的requestMapping跳转值/该类中存在的requestMapping/,而在Class上标记了requestMapping的话,则需要在指定的位置创建一个文件夹作为存放.

例如:

输入http://localhost:8080/SpringMVC_10000/test/hello的话则会查找根目录下面的test文件夹下面的hello.jsp.组成是prefix(前缀)+/test/+方法名+suffix(后缀).目录结构如图2:

36C40D3C.png?download&psid=1]

图2:跳转目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: