spring mvc 基础入门

一、基本概念

控制器(controller):服务端请求处理与页面响应组件,通过 @RequestMapping参数,响应URI路径访问请求;

模型(model):从服务端返回客户端的数据,在客户端可操作处理的数据对象;

视图(View):客户端页面,一般为*.jsp 文件;

二、Java Sprng MVC  程序处理流程

三、在控制器中访问request、response对象


@Controller
public class OtherExampleController {
 
   @RequestMapping("/somePath")
   public String requestResponseExample(HttpServletRequest request,
           HttpServletResponse reponses, Model model) {
 
       // Todo something here
 
       return "someView";
   }
}
通过HttpServletRequest、HttpServletResponse直接访问http请求内容,需要在响应的路径响应方法中添加@ResponseBody,以直接返回response内容
备注:采用@ResponseBody声明直接通过response数据后,后者通过response写入到输出流,或者通过return 返回数据,不能通过既直接写入又return返回,因return的内容实际也是写入到response输出流中的

四、重定向

可通过向模型返回 “redirect:/path”的方法进行控制器重定向,重定向时向上一页面返回的模型值将作为下一路径的request参数进行传递,url如示例:http://localhost:8080/test/hello1?greeting=Hello+Spring+MVC+first+testnull   其中greeting本是控制器向视图返回的模型数据;代码示例如下:

@Controller
public class HelloWorldController {
	@RequestMapping("/hello")
    public String hello(HttpServletRequest request, HttpServletResponse response, Model model) {
		String reParameter= request.getParameter("test");		
        model.addAttribute("greeting", "Hello Spring MVC first test"+reParameter);            		   
        return "redirect:/hello1";
         
    }	
	@RequestMapping("/hello1")
    public String hello1(HttpServletRequest request, HttpServletResponse response, Model model) {
		String reParameter= request.getParameter("greeting");		
        model.addAttribute("greeting", "this is redirsct pages"+reParameter);
        return "helloworld";         
    }
}

四、控制器与视图的数据交互

1、控制器与视图之间可通过模型进行数据交互,模型可划分为在路径访问函数中返回的数据以及直接向页面返回的数据,模型数据均采用现模型添加:对象名称和对象值这样的键值对来交互,页面中直接按照对象名称即可获得模型中的数据实例。代码示例:

<!--对象被添加到模型,访问名称为countries-->
@ModelAttribute("countries")
	public List<String> initializeCountries() {

		List<String> countries = new ArrayList<String>();
		countries.add("USA");
		countries.add("CHINA");
		countries.add("FRANCE");
		countries.add("GERMANY");
		countries.add("ITALY");
		countries.add("OTHER");
		return countries;
	}
在页面中可直接通过 名称访问模型对象

<div class="row">
			<div class="form-group col-md-12">
				<label class="col-md-3 control-lable" for="country">Country</label>
				<div class="col-md-7">
					<form:select path="country" id="country" class="form-control input-sm">
				        <form:option value="">Select Country</form:option>
			    	    <form:options items="${countries}" />
				    </form:select>
					<div class="has-error">
						<form:errors path="country" class="help-inline"/>
					</div>
				</div>
			</div>
		</div>

四、视图返回

通过 控制器返回的视图,可以是jsp页面,也可以是rss订阅返回数据,以及从服务端返回的json或xml数据;

1、rss订阅返回的实现:

1)spring-mvc.xml配置文件修改

<context:component-scan base-package="com.yiibai.springmvc" />
<!-- 替代了返回jsp页面视图配置-->
 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
  <bean id="rssViewer" class="com.yiibai.springmvc.RSSFeedViewer" />
2)实现视图bean
public class RSSFeedViewer extends AbstractRssFeedView {
   @Override
   protected void buildFeedMetadata(Map<String, Object> model, Channel feed,
      HttpServletRequest request) {
      feed.setTitle("YiibaiPoint Dot Com");
      feed.setDescription("Java Yiibai and Examples");
      feed.setLink("http://www.yiibai.com");
      super.buildFeedMetadata(model, feed, request);
   }
   @Override
   protected List<Item> buildFeedItems(Map<String, Object> model,
      HttpServletRequest request, HttpServletResponse response) throws Exception {
      List<RSSMessage> listContent = (List<RSSMessage>) model.get("feedContent");
      List<Item> items = new ArrayList<Item>(listContent.size());
      for(RSSMessage tempContent : listContent ){
         Item item = new Item();
         Content content = new Content();
         content.setValue(tempContent.getSummary());
         item.setContent(content);

         item.setTitle(tempContent.getTitle());
         item.setLink(tempContent.getUrl());
         item.setPubDate(tempContent.getCreatedDate());
         items.add(item);
      }
      return items;        
   }
}
3)控制器返回rss订阅内容

@RequestMapping(value="/rssfeed", method = RequestMethod.GET)
   public ModelAndView getFeedInRss() {
      List<RSSMessage> items = new ArrayList<RSSMessage>();
      RSSMessage content  = new RSSMessage();
      content.setTitle("Spring教程");
      content.setUrl("http://www.yiibai/spring");
      content.setSummary("Spring tutorial summary...");
      content.setCreatedDate(new Date());
      items.add(content);

      RSSMessage content2  = new RSSMessage();
      content2.setTitle("Spring MVC教程");
      content2.setUrl("http://www.yiibai/spring_mvc");
      content2.setSummary("Spring MVC tutorial summary...");
      content2.setCreatedDate(new Date());
      items.add(content2);

      ModelAndView mav = new ModelAndView();
      mav.setViewName("rssViewer");
      mav.addObject("feedContent", items);

      return mav;
   }
2、spring-mv返回xml数据
1)、修改spring-mvc配置文件

<context:component-scan base-package="com.yiibai.springmvc" />
   <mvc:annotation-driven />
2)、控制器直接返回可序列化为xml的对象

@Controller
@RequestMapping("/user")
public class UserController {
   @RequestMapping(value="{name}", method = RequestMethod.GET)
   public @ResponseBody User getUser(@PathVariable String name) {
//===========User为可序列化为xml的对象====
      User user = new User();

      user.setName(name);
      user.setId(1);
      return user;
   }
}

关于spring-mvc如何使用映射器,实现Spring MVC简单URL处理程序映射以及Spring MVC多动作控制器

参见地址:http://www.yiibai.com/spring_mvc/springmvc_simpleurlhandlermapping.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值