annotation-config />
beans>
Controller例子:
/*
spring3.0Restful风格
http:
//localhost:
8080/test/start.do?
name=zhangsan传统风格
http:
//localhost:
8080/test/start/zhangsan.doRESTFUL风格
*/
@Controller
//1.标记一个Controller
//@RequestMapping("/user")
publicclassAppController{
@Autowired@Qualifier("userService")
//@Qualifier指明bean名称必须userService
privateUserServiceuserService;
@RequestMapping(value="/start",method=RequestMethod.GET)
//get方式提交才会转到该方法
publicvoidgetstart(){
System.out.println("callgetstart");
}
@RequestMapping(value="/start",method=RequestMethod.POST)//直接跳转地址该页面报错因为POST方法,只能GET方法
//POST方式提交才会转到该方法
publicvoidpoststart(){
System.out.println("callpoststart");
}
@RequestMapping(value="/{birdate}")
//数据绑定
publicvoidpoststart(@PathVariable("birdate")Datebirdate){
System.out.println("callpoststart");
}
//第一种:
无返回参数(不返回viewname,参照@RequestMapping),返回http:
//ip/项目名称/prfix/@RequestMapping([controller]+method)/suffix
//方法上必须有RequestMapping,类上可以不加RequestMapping
@RequestMapping(value="/novoid",method=RequestMethod.GET)
//get方式提交才会转到该方法
publicvoidnoreturn(){
System.out.println("callnovoid");
}
//第二种:
返回string,返回http:
//ip/项目名称/prfix/返回值/suffix
@RequestMapping(value="/string/{name}/{age}")
publicStringreturnString(@PathVariable("name")Stringname){//此处指定名称必须与URL
//变量名称{name}相同RESTFUL风格
System.out.println(name);
return"stringview";
}
//第三种:
返回string,返回http:
//ip/项目名称/prfix/viewname/suffix
@RequestMapping(value="/modandview",method=RequestMethod.GET)
publicModelAndViewindex(HttpServletRequestrequest){
//ModelAndView的用法:
三种
//1用法:
/*
*ModelAndViewmav=newModelAndView();
*mav.setViewName("index");//要跳转到的view视图mav.addObject("msg",
*"Hello,SpringMVC");
*///要传递到视图中的值(用法跟request传值相同)
//2用法
/*
*ModelAndViewmav=newModelAndView("index");mav.addObject("msg",
*"SpringMVC");mav.addObject("Hi","Hi,Jack");
*/
//3用法返回prefix(前缀)+viewname+suffix(后缀)
ModelAndViewmav=newModelAndView("ModAndView","msg",
"Hello,SpringMVC");
System.out.println("invoke..");
returnmav;
}
//第四种:
返回map,返回http:
//ip/项目名称/prfix/@RequestMapping(controller+method)/suffix
@RequestMapping(value="/map",method=RequestMethod.GET)
publicMapmap(){
Mapmap=newHashMap();
Useruser=newUser();
user.setAge(30);
user.setName("zhangsan");
map.put("hello","world");
map.put("user",user);
returnmap;
}
//第五种:
返回modelMap,返回http:
//ip/项目名称/prfix/@RequestMapping(controller+method)/suffix
//展示${aa}${user.name}${user.age}
@RequestMapping(value="/modelmap",method=RequestMethod.GET)
publicModelMapmodelMap(){
ModelMapmodelMap=newModelMap();
Useruser=newUser();
user.setAge(20);
user.setName("lisi");
modelMap.addAttribute("hello","world");
Mapmap=newHashMap();
map.put("user",user);
modelMap.addAllAttributes(map);
returnmodelMap;
}
//第五种:
返回List,返回http:
//ip/项目名称/prfix/@RequestMapping(controller+method)/suffix
//页面展示0:
${stringList[0]}1:
${stringList[1].name}
@RequestMapping(value="/list/{id}",method=RequestMethod.GET)
//{id}RESTFUL风格
publicStringlist(@PathVariable("id")intid,ModelMapmodel){//必须定义在此形参,才能在页面展现
model.put("userList",userService.listUser());
System.out.println("id:
"+id);
//model会在vm模版展现
return"list.vm";
}
@RequestMapping(value="/add")
publicStringadd(ModelMapmodel){
Useruser=newUser("lily",27);
userService.addUser(user);
model.put("userList",userService.listUser());
return"list.vm";
}
publicvoidsetUserService(UserServiceuserService){
this.userService=userService;
}
}
乱码:
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
//编码设置很重要
第一步:
配置web.xml
dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/config.xml
2
dispatcher
*.do
说明:
DispatcherServlet是SpringMVC中负责请求调度的核心引擎,所有的请求将由此Servlet根据配置分发至各个逻辑处理单元。
其内部同时也维护了一个ApplicationContext实例。
我们在节点中配置了名为“contextConfigLocation”的Servlet参数,此参数指定了Spring配置文件的位置“/WEB-INF/Config.xml”。
如果忽略此设定,则默认为“/WEB-INF/-servlet.xml”,其中以Servlet名替换(在当前环境下,默认值也就是“/WEB-INF/Dispatcher-servlet.xml)。
第二步:
配置config.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN2.0//EN""http:
//www.springframework.org/dtd/spring-beans-2.0.dtd">
--DefinitionofViewResolver-->
--view层的类型JstlView为jsp,FreeMarker,Velocity-->
org.springframework.web.servlet.view.JstlView
--ViewResolver的prefix和suffix参数指定了表现层资源的前缀和后缀,运行时,Spring将为指定的表现层资源自动追加前缀和后缀,以形成一个完整的资源路径如:
mav.setViewName("account/editAccount");显示/WEB-INF/jsp/account/editAccount.jsp完整路径
-->
/WEB-INF/jsp/
.jsp
--SimpleUrlHandlerMapping通过key与controller映射的,BeanNameUrlHandlerMapping通过cotroller的name(/login.do)属性-->
--RequestMapping-->
--配置多个映射-->
loginAction
---ActionDefinition-->
--搜集表单的FormBeancommandClass参数源于LoginAction的基类BaseCommandController-->
com.whl.form.LoginInfo
--view名称-->
loginfail
main
第三步:
页面
index
//.代表当前的项目路径
登录
用户名:
密码:
第四步:
Form表单Bean
publicclassLoginInfo{
privateStringusername;
privateStringpwd;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPwd(){
returnpwd;
}
publicvoidsetPwd(Stringpwd){
this.pwd=pwd;
}
}
第五步:
编写Action
publicclassLoginActionextendsSimpleFormController{
privateStringfail_view;
privateStringsuccess_view;
publicStringgetFail_view(){
returnfail_view;
}
publicvoidsetFail_view(Stringfail_view){
this.fail_view=fail_view;
}
publicStringgetSuccess_view(){
returnsuccess_view;
}
publicvoidsetSuccess_view(Stringsuccess_view){
this.success_view=success_view;
}
/*我们在子类中覆盖了父类的onSubmit方法;而onSubmit方法用于处理业务请求。
负责数据封装和请求分发的Dispatcher,将对传入的HttpServletRequest进行
封装,形成请求数据对象,之后根据配置文件,调用对应业务逻辑类的入口方法
(这里就是LoginAction)的onSubmit()方法,并将请求数据对象及其他相关资源引
用传入。
*/
@SuppressWarnings("unchecked")
@Override
protectedModelAndViewonSubmit(Objectcommand)throwsException{
LoginInfologinInfo=(LoginInfo)command;
if(login(loginInfo)==0){
HashMapresult_map=newHashMap();
result_map.put("logininfo",loginInfo);
ListmsgList=newArrayList();
msgList.add("msg1");
msgList.add("msg2");
msgList.add("msg3");
result_map.put("messages",msgList);
returnnew
ModelAndView(this.getSuccess_view(),result_map);
}else{
returnnewModelAndView(this.getFail_view());
}
}
privateintlogin(LoginInfologinInfo){
if("Erica".equalsIgnoreCase(loginInfo.getUsername())
&&"mypass".equals(loginInfo.getPwd())){
return0;
}
return1;
}
}
SpringMVC几种Cotroller:
1.实现接口Controller
publicinterfaceController{
ModelAndViewhandleRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsException;
}
2.继承AbstractCommandContro