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

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

2010-08-10 16:29 567 查看
这篇不会大量的张贴代码,毕竟是自己对springMVC的学习,而不是对某一种东西作为详细解析的,好了话不多说了,近期学习springMVC换了不少东西,连日志工具也换了,采用了slf4j+logback进行日志管理,至于好处,请自行Google

如何把主流的log4j+commons-loggin更换为slf4j+logback呢,由于spring里面采用了commons-logging日志监控,所以我们需要准备以下几个包:

logback-classic.jar:改善了log4j并且实现了slf4j-log4j的代码

logback-core.jar:logback的核心代码

slf4j-api.jar:slf4j实现代码

jcl-over-slf4j.jar:代替commons-loggin类

log4j-over-slf4j.jar(可选):替换log4j。原有的log4j.properites将失效,需要转换为logback.xml

jul-to-slf4j.jar:(可选)替换jdklogging。需要在程序开始时调用SLF4JBridgeHandler.install()来注册listener。

LogBack.xml配置文件跟Log4j.xml的配置文件非常相似:

<?xmlversion="1.0"encoding="UTF-8"?>
<configuration>
<appenderclass="ch.qos.logback.core.ConsoleAppender"name="STDOUT">
<encoder>
<pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{100}-%msg%n
</pattern>
</encoder>
</appender>
<loggername="org.lxh.mvc.controller"level="INFO"/>

<!--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>

<root>
<levelvalue="debug"/>
<appender-refref="STDOUT"/>
</root>
</configuration>


logger{100}:是限制当前日志显示内容的长度,最大为100个字符

如何使用logback+slf4j?

参考代码:

privateLoggerlogger=LoggerFactory.getLogger(RequestMappingStudy1.class);


同以前使用log4j+commons-logging是一样的方式,只是换了使用slf4j的工厂类而已

用到spring配置如下:

<!--对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="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<propertyname="prefix"value="/"/>
<propertyname="suffix"value=".jsp"></property>
</bean>


这次开始主要对spring的每个注解用法进行详细的介绍,

@RequestMapping的参数如下

/**

*@seeRequestMapping参数

*

*@paramvalue

*需要跳转的地址

*@parammehtod

*基于RestFul的跳转参数,有RequestMethod.getpost,put等

*@paramparams

*符合某个参数的时候才调用该方法

*@paramheaders

*符合头信息的时候才调用

**/


SpringMVC中大部分请求都是由RequestMapping提交的,而且提交的类型有很多种,以3.0来讲一般的请求方式有以下几种

第一种:以无参的形式返回:

/**

*无参数返回的是根据prefix前缀+@RequestMappingvalue+suffix后缀组成

*

**/

@RequestMapping("/novoid")

publicvoidnovoid(){

logger.info(this.getClass().getSimpleName()+"novoid方法被调用");

}


返回的地址是http://访问地址/项目名称/spring配置文件bean为viewResolver的prefix的值+requestMapping返回的值+suffix的值

第二种:返回一个String类型:

/**

*根据String字符串返回对应的地址prefix前缀+返回值+suffix后缀组成

**/

@RequestMapping("/string")

publicStringstring(){

logger.info("String方法调用");

return"WEB-INF/jsp/success";

}


第三种:返回一个ModelAndView对象

/**

*spring2.5的方法,返回一个ModelAndView对象,通过setViewName方法跳转到指定的页面调用addObject

*相当于调用request.setAttribute方法

**/

@RequestMapping("/modelview")

publicModelAndViewview(Modelmodel){

logger.info("view方法调用");

ModelAndViewandView=newModelAndView();

andView.setViewName("WEB-INF/jsp/success");

returnandView;

}


第四种返回一个Map集合

/**

*@see使用map作为返回值的时候是以prefix前缀+requestMapping的value+suffix后缀组成返回一个map

*,map的put方法调用相当于request.setAttribute方法

**/

@RequestMapping("/mapa")

publicMap<String,Object>mapa(ModelMapmap1){


Map<String,Object>map=newHashMap<String,Object>();

UserBeanbean=newUserBean();

bean.setId(1);

bean.setUsername("EdwardLau");

bean.setPassword("edward");

map.put("hello","worldkey");

map.put("user",bean);

returnmap;

}


使用第四种方法,可以在页面中通过调用JSTL进行取值,如下面jsp代码

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">

<title>Mapa</title>

</head>

<body>

Mapa

姓名:${user.username}

密码:${user.password}

hello:${hello}

</body>

</html>


第五种返回一个ModelMap类型:

/**
*@see返回一个ModelMap类型,返回地址根据以prefix前缀+requestMapping的value+suffix后缀组成
*ModelMap本身也拥有hashmap的方法,也可以使用addAllAttributes对一个map添加到attribute里面
**/
@RequestMapping("/map")
publicModelMapmap(){
ModelMapmap=newModelMap();
map.addAttribute("aa","bb");
map.addAllAttributes(temp());
returnmap;
}

/**
*@see临时类
*@return返回一个map类型
**/
publicMap<String,UserBean>temp(){
Map<String,UserBean>map1=newHashMap<String,UserBean>();
UserBeanbean=newUserBean();
bean.setId(1);
bean.setUsername("EdwardLau");
bean.setPassword("edward");
map1.put("user",bean);
//map1.put("hello","worldkey");
UserBeanbean1=newUserBean();
bean1.setId(2);
bean1.setUsername("EdwardLau2");
bean1.setPassword("edward");
map1.put("user1",bean1);
System.out.println(map1);
returnmap1;
}


使用ModelMap可以把一个多个集合存到一个属性中,可以直接在页面调用EL语言进行读取,jsp代码如下:

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">

<title>Mapa</title>

</head>

<body>

Mapa

姓名:${user.username}

密码:${user.password}

hello:${hello}

aa:${aa}

</body>

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