package cn.tramp.iblog.web;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.oxm.Marshaller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.WebUtils;
import cn.tramp.iblog.domain.FormatUser;
import cn.tramp.iblog.domain.User;
import cn.tramp.iblog.service.BlogService;
import cn.tramp.iblog.service.UserService;
import cn.tramp.iblog.utils.Page;
import com.google.gson.Gson;
/**
* Handles requests for the application home page.
*/
@Controller
@SessionAttributes("user")
public class HomeController {
private static final Log logger = LogFactory.getLog(HomeController.class);
private Gson gson = new Gson();
@Autowired
private UserService userService;
@Autowired
private BlogService blogService;
@Autowired
private Marshaller marshaller;
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is " +locale+ ".");
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
Page<User> page = new Page<User>();
page.setTotalRecord(1);
page.setCurrentPage(1);
page.setPageSize(10);
User user = userService.getUserById(8);
try {
FileOutputStream os = new
FileOutputStream("e:/test/xxxx.xml");
this.marshaller.marshal(user, new StreamResult(os));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(user.toString());
userService.getUserByPage(page);
List<User> list = page.getDatas();
//userService.addUser(null);
model.addAttribute("serverTime", formattedDate );
model.addAttribute("USER", user);
model.addAttribute("LIST", list);
return "home";
}
@RequestMapping("/userlistexcel")
public String showUserListInExcel(ModelMap mm) {
Page<User> page = new Page<User>();
page.setTotalRecord(1);
page.setCurrentPage(1);
page.setPageSize(10);
userService.getUserByPage(page);
List<User> list = page.getDatas();
mm.addAttribute("LIST", list);
return "userListExcel";
}
@RequestMapping("/userlistpdf")
public String showUserListInPdf(ModelMap mm) {
Page<User> page = new Page<User>();
page.setTotalRecord(1);
page.setCurrentPage(1);
page.setPageSize(10);
userService.getUserByPage(page);
List<User> list = page.getDatas();
mm.addAttribute("LIST", list);
return "userListPdf";
}
// WEB MVC
@RequestMapping(value = "/handle1", method = RequestMethod.GET, headers = "content-type=text/*",params = {"param1=value1", "params"})
public String handle1(@RequestParam(value = "userName", required = false, defaultValue = "zhang") String userName,
@RequestParam("age") int age) {
return null;
}
// CookieValue 获取Cookie的值
@RequestMapping("handle2")
public String handle2(
@CookieValue(value = "sessionId", required = false) String sessionId,
@RequestParam("age") int age) {
return null;
}
// RequestHEader 获取header 的内容
public String handle3(
@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) {
return null;
}
// 支持级联的属性名 adpt.id adpt.address.id
@RequestMapping(value = "handle4")
public String handle4(User user) {
return null;
}
@RequestMapping("/handle5")
public void handle5(HttpServletRequest request, HttpServletResponse response) {
String userName = WebUtils.findParameterValue(request, "userName");
response.addCookie(new Cookie("userName", userName));
}
@RequestMapping("/value6")
public ModelAndView handle6(HttpServletRequest request) {
String name = WebUtils.findParameterValue(request, "name");
ModelAndView view = new ModelAndView("result");
view.addObject("name", name);
return view;
}
@RequestMapping("/value7")
public String handle7(HttpSession session,
@RequestParam("userId") int userId) {
return null;
}
// 提供代理类可以访问请求对象的任何信息
@RequestMapping("/value8")
public String handle8(WebRequest request) {
return null;
}
@RequestMapping("/handle9")
public void handler9(OutputStream os) throws IOException {
Resource res = new ClassPathResource("/image/1.jpg");
FileCopyUtils.copy(res.getInputStream(), os);
}
// 使用 HttpMessageConverter<T> 将请求信息转化被绑定到处理方法的入参中
// 1 @RequestBody @ResponseBody 对处理方法标注
// 2 HttpEntity<T> ResponseEntity<T> 作为入参或返回值
@RequestMapping("/handle10")
public String handle10(@RequestBody String requestBody) {
// 将请求报文体转化为字符串绑定到 requestBody
System.out.println(requestBody);
return null;
}
@ResponseBody
@RequestMapping("/handle11/{imageId}")
public byte[] handle11(@PathVariable("imageId") String imageId) throws IOException {
// 读取一张图片 客户端将显示这张图片
Resource resource = new ClassPathResource("image/" + imageId);
byte[] fileData = FileCopyUtils.copyToByteArray(resource.getInputStream());
// 将文件保存
Resource outFile = new FileSystemResource("E://test//001.jpg");
FileCopyUtils.copy(resource.getFile(), outFile.getFile());
return fileData;
}
// Spring MVC 根据HttpEntity泛型的类型调用对应的HttpMessageConverter
@RequestMapping("/handle12")
public String handle12(HttpEntity<String> httpEntity) {
HttpHeaders header = httpEntity.getHeaders();
long contentLength = httpEntity.getHeaders().getContentLength();
System.out.println(httpEntity.getBody());
return null;
}
public ResponseEntity<byte[]> handle13(
@PathVariable("imageId") String imageId) throws IOException {
Resource res = new ClassPathResource("/image/001.jpg");
byte[] fileData = FileCopyUtils.copyToByteArray(res.getInputStream());
ResponseEntity<byte[]> responseEntity =
new ResponseEntity<byte[]>(fileData, HttpStatus.OK);
return responseEntity;
}
/*
* 当控制器处理方法使用上述注解或类型时,Spring 首先根据请求头或响应头的Accept 属性选择匹配的
* HttpMessageConverter,进而根据参数类型或泛型类型的过滤得到匹配的Converter。找不到,报异常。
*/
// 处理XML 和 JSON
/*
* 只需要在Spring Web 容器中为AnnotationMEthodHandlerAdapter 装配好相应的处理XML JSON 的Converter
* 并在交互过程中通过Accept指定MIME Spring MVC 就可以是服务端的处理方法和客户端透明地通过XML或JSON格式
* 的消息进行通信
*/
// 根据Accept处理JSON XML
// 根据Content-type 确定请求数据的格式 根据Accept 确定相应的消息格式
@RequestMapping("/handler14")
public ResponseEntity<User> handler14(HttpEntity<User> requestEntity) {
User user = requestEntity.getBody();
user.setUser_id(100);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
/*
* @ModelAttribute 方法入参标注该注解后,入参的对象就会放到数据模型中
* 入参为 Map Model 或 ModelMap时,处理完毕后,数据自动添加到模型中
* 在方法体中可以通过上述Model 访问到模型中的所属数据
* @SessionAttribute 将模型中的某个属性暂时放到HttpSession 中,多个
* 请求之间可以共享该属性。
* Spring MVC 会将模型数据转储到ServletRequest 的属性列表中
*
*/
@RequestMapping("/handler15")
public String handler15(@ModelAttribute("user") User user) {
return null;
}
@ModelAttribute("user")
public User getUSer() {
return new User();
}
@RequestMapping("/handler16")
public String handler16(ModelMap model) {
model.addAttribute("attr", "zhang");
User user = (User) model.get("user");
return null;
}
public String handler17(ModelMap modelMap, SessionStatus sessionStatus) {
User user = (User) modelMap.get("user");
if (user != null) {
// Spring MVC 清除本处理器对应的Session属性
sessionStatus.setComplete();
}
return null;
}
/*
* 需要导入annotation 和hibernate 注解包
* Spring 是通过对处理方法签名的规约来保存校验结果的。前一个表单/命令对象的
* 校验结果保存在其后的入参中,这个保存校验结果的入参必须是BindingResult 或
* Errors 类型 。 成对出现的。
* 校验结果会保存到隐含模型中,即使入参中没有对应的结果对象,校验结果也不会丢失。
*
*/
@RequestMapping("/handler18")
public String hander18(@Valid @ModelAttribute("user") FormatUser user,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "error";
}
return "success";
}
}
分享到:
相关推荐
在.NET开发领域,Spring.Web.Mvc3是一个非常重要的框架,它为基于ASP.NET MVC的应用程序提供了强大的依赖注入(DI)和面向方面的编程(AOP)支持。这个“Spring.Web.Mvc3.zip bug修改版”可能是一个修复了原版Spring...
2. **MVC(模型-视图-控制器)**:Spring 3.x的Web MVC框架提供了更强大的视图解析和数据绑定能力,以及更灵活的配置方式,如基于注解的Controller和HandlerMapping。 3. **JSR-303/JSR-349(Bean验证)**:Spring ...
通过阅读《Spring 3.x企业应用开发实战》,读者将能够了解如何设置和配置Spring环境,创建bean定义,实现依赖注入,以及如何利用Spring MVC构建Web应用程序。此外,书中的案例将涵盖数据库操作、事务管理、安全控制...
源码光盘包含的实例代码可以帮助读者更好地理解这些概念和用法,通过实际操作加深对Spring3.X的理解。在学习过程中,读者可以跟随书中的步骤,逐步搭建和调试示例应用,从而提升自己的开发技能。同时,这种实践性的...
6. **MVC注解**:Spring3.x引入了更多的注解,如`@RequestMapping`、`@Controller`、`@Service`、`@Autowired`等,使得开发者可以直接在类和方法上使用注解,减少XML配置,提高开发效率。 7. **单元测试**:Spring...
3. **Spring MVC**:Spring的Web MVC模块提供了构建Web应用的全功能框架,包括模型-视图-控制器模式的支持,使得Web开发更加简洁高效。 4. **数据访问**:Spring对各种持久层技术如JDBC、ORM(Hibernate、MyBatis)...
在本项目中,我们主要关注的是"spring 3.x实战开发源码",这涉及到Spring框架的高级应用,包括Spring MVC、MyBatis以及单元测试等核心知识点。下面将详细阐述这些主题,并结合"chapter12"和"chapter2"这两个源代码...
《Spring 3.x企业应用开发实战》这本书是针对Spring框架3.x版本的详细指南,旨在帮助开发者深入理解和熟练运用Spring...《Spring 3.x企业应用开发实战》这本书应该会详细讲解这些内容,并通过实例指导读者实践操作。
在Java Web开发领域,Spring框架以其强大的依赖注入和面向切面编程能力,而Struts则以其优秀的MVC架构模式,共同构建了众多企业级应用的基础。当这两者结合时,可以形成一个强大且灵活的开发环境。本文将详细解析`...
本书《Spring 3.x 企业应用开发实战》将详细讲解这些概念,并通过实例演示如何在实际项目中应用Spring框架,帮助读者从理论到实践,掌握Spring 3.x的核心技术和最佳实践。书中可能涵盖了Spring配置、AOP编程、Spring...
3. **Spring MVC**:Spring的Model-View-Controller(MVC)框架,用于构建Web应用程序。它提供了灵活的配置,支持多种视图技术,如JSP、FreeMarker等,并且易于测试。 4. **数据访问**:Spring支持多种数据访问技术...
在本资源中,"Spring 3.x企业应用开发实战光盘源码part02" 提供了Spring框架3.x版本的企业级应用开发实例代码。这部分是整个教程源码的第二部分,暗示着可能存在一个第一部分,可能包含了基础的设置和初始化工作。...
正式名称“Spring Web MVC”来源于其源模块 `spring-webmvc`,但在实际使用中更常见地被称为“Spring MVC”。 与 Spring Web MVC 并行地,Spring Framework 5.0 引入了响应式栈——一个名为 Spring WebFlux 的 Web ...
6. **MVC框架**:Spring MVC是Spring提供的一个用于构建Web应用的模型-视图-控制器框架,它简化了Web应用的开发,提供了强大的数据绑定和验证功能。 7. **Spring的单元测试和支持**:Spring提供了一套全面的测试...
### Apress.Expert.Spring.MVC.and.Web.Flow.Feb.2006 读书笔记关键知识点解析 #### 一、背景介绍 本读书笔记基于《Expert Spring MVC and Web Flow》(2006年2月版),书中深入探讨了Spring框架中的MVC与Web Flow...
**Spring MVC 框架实例详解** Spring MVC 是 Spring 框架的重要组成部分,它是一个用于构建 Web 应用程序的 Model-View-Controller (MVC) 模型的实现。在基于 Spring 2.5 的项目中,XML 配置是主要的配置方式,相比...
Spring MVC是Spring提供的Web开发框架,它分离了模型、视图和控制器,使得Web应用的开发更加清晰和高效。Spring MVC通过DispatcherServlet接收请求,使用HandlerMapping找到对应的处理器,再由ViewResolver渲染结果...
3. **Spring MVC**:Spring MVC是Spring框架的Web层组件,用于构建RESTful Web服务。源码中会有Controller、Service、DAO层的实现,以及视图解析和模型数据绑定的过程。 4. **数据访问集成**:Spring提供了与多种...
在Spring 3.x版本中,框架进一步增强了对Web、数据访问、事务管理以及集成其他技术的支持。 首先,源码包中包含的章节范围从第2章到第19章,这涵盖了Spring框架的基础和进阶内容。以下是这些章节可能涉及的关键知识...
在Spring 2.x中,开发者通过XML配置文件或注解来声明组件及其依赖,容器负责实例化、装配以及管理这些对象。 2. **依赖注入**: 依赖注入是IoC的一种实现方式,它使得对象之间的依赖关系在编译时并不确定,而是在...