Spring MVC —— 高级组件

一.实现增删改查

第一种方法

开头
UserInfoController.java

@Controller
@RequestMapping("/userInfo")
public class UserInfoController {

	@Autowired
	private UserService userService;

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService{

	@Autowired
	private UserDao userDao;

UserDaoImpl.java

@Repository
public class UserDaoImpl implements UserDao{

	@Autowired
	private JdbcTemplate jdbcTemplate;

增加

访问方式:http://localhost:8080/mvc/userInfo/add

UserInfoController.java

@RequestMapping("/add")
	public String add(UserInfo userInfo) throws SQLException, ClassNotFoundException {
		
		userService.insertUserInfo(userInfo);
		return "success";
	}

UserServiceImpl.java

public void insertUserInfo(UserInfo su) {
		userDao.insertUserInfo(su);
	}

UserDaoImpl.java

public void insertUserInfo(UserInfo su) {
		String sql="insert into userinfo (userName,age, passwd) "
				+ "values (?, ?, ?)";
		
		jdbcTemplate.update(sql, su.getUserName(), su.getAge(),su.getPasswd());
	}

删除

访问方式:http://localhost:8080/mvc/userInfo/delete

UserInfoController.java

@RequestMapping("/delete")
	public String delete(UserInfo userInfo) throws SQLException {
		userService.deleteUserInfo(userInfo);
		return "success";
	}

UserServiceImpl.java

public void deleteUserInfo(UserInfo su) {
		userDao.deleteUserInfo(su.getUserName());
	}

UserDaoImpl.java

public void deleteUserInfo(String userName) {
		String sql = "delete from userinfo  where userName=?";
		jdbcTemplate.update(sql, userName);
	}

修改

访问方式:http://localhost:8080/mvc/userInfo/update

UserInfoController.java

@RequestMapping("/update")
	public String update(UserInfo userInfo) throws SQLException {
		userService.updateUserInfo(userInfo);
		return "success";
	}

UserServiceImpl.java

public void updateUserInfo(UserInfo su) {
		userDao.updateUserInfo(su);
	}

UserDaoImpl.java

public void updateUserInfo(UserInfo su) {
		String sql="update userinfo set age = ?,passwd =?   where userName=?";
		jdbcTemplate.update(sql,  su.getAge(),su.getPasswd(),su.getUserName());
	}

显示列表

访问方式:http://localhost:8080/mvc/userInfo/list

UserInfoController.java

@RequestMapping("/list")
	public String list(Map<String, Object> map) {
		
		map.put("userList", userService.getSUList());
		return "user/list";
	}

UserServiceImpl.java

public List<UserInfo> getSUList() {
		return userDao.getSUList();
	}

UserDaoImpl.java

public List<UserInfo> getSUList() {
		
		String sql = "select * from userinfo";
		return jdbcTemplate.query(sql, new BeanPropertyRowMapper<UserInfo>(UserInfo.class));
	}
第二种方法

UserInfoRestController.java
开头

 @RequestMapping("/userInfoRest")
@Controller
public class UserInfoRestController {

	@Autowired
	private UserService userService;

增加

访问方式:http://localhost:8080/mvc/userInfoRest/manage (post方法请求)

@RequestMapping(value = "/manage", method= {RequestMethod.POST})
	public String addUser(UserInfo su) {
		System.out.println("addUser==========>" + su);
		userService.insertUserInfo(su);	
		return "redirect:manage";
	}

删除

访问方式:http://localhost:8080/mvc/userInfoRest/manage (delete方法请求)

@RequestMapping(value = "/manage", method= {RequestMethod.DELETE})
	public String deleteUser(UserInfo su) {
		userService.deleteUserInfo(su);
		return "redirect:manage";
	}

修改

访问方式:http://localhost:8080/mvc/userInfoRest/manage (put方法请求)

 @RequestMapping(value = "/manage", method= {RequestMethod.PUT})
	public String editUser(UserInfo su) {	
		System.out.println("editUser==========>" + su);
		userService.updateUserInfo(su);
		return "redirect:manage";
	}

显示列表

访问方式:http://localhost:8080/mvc/userInfoRest/manage (get方法请求)

 @RequestMapping(value = "/manage", method= {RequestMethod.GET})
	public String list(Map<String, Object> map) {
		map.put("userList", userService.getSUList());
		return "user/list";
	}

二.文件上传

常规方法
public void doPost(HttpServletRequest request, HttpServletResponse response) {
  	    DiskFileItemFactory dfif = new DiskFileItemFactory();	
		ServletFileUpload sfu = new ServletFileUpload(dfif);		
		try {
			List<FileItem>  fiList = sfu.parseRequest(request);
		} catch (FileUploadException e) {
			e.printStackTrace();
		}
	}
MVC的方法
@Controller
public class FileUploadAction {

	@RequestMapping("/fileUploadPage")
	public String fileUploadPage() {
		return "fileupload/fileupload";
	}
	
	@RequestMapping("/fileUpload")
	public String fileUpload(MultipartFile avatar, String userName) {
		
		//判断是否为空
		if(avatar.isEmpty()) {
			return "error";
		}		
		//获取原文件名称
		String orginName = avatar.getOriginalFilename();		
		String name = avatar.getName();
		System.out.println("========>" + name);
		String destFileName = UUID.randomUUID().toString() + "." + FilenameUtils.getExtension(orginName);		
		File destFile = new File("D:\\" + destFileName);		
		try {
			avatar.transferTo(destFile);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
		return "success";
	}
}

注意

  1. 对于jsp页面,提交方法必须为post,在form标签中添加属性:enctype=“multipart/form-data”

fileupload.jsp

<form action="${pageContext.request.contextPath}/fileUpload" enctype="multipart/form-data" method="post">
		<input type="text" name="userName"><br>
		<input type="file" name="avatar"><br>
		<input type="submit" value="提交">
	</form>
  1. 在mvc的handler方法中定义MultipartFile类型来接收用户上传的文件
  1. 在应用上下文中配置Multipart解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 上传文件的最大值, 单位为:字节  50*1024*1024 
		<property name="maxUploadSize" value="52428800‬"></property>
		-->
		<property name="maxUploadSize" value="#{50*1024*1024}"/>
		<property name="defaultEncoding" value="UTF-8"></property>
	</bean>

三.json数据交互

常规方法
@RequestMapping("userList")
	public void userList(HttpServletResponse response) {		
		List<SysUser> userList = userService.getSUList();		
		String userGson = new Gson().toGson(userList);		
		response.getWriter().write(userGson);	
		return "success";
	}
MVC方法

WebServiceController.java

@RequestMapping("userWsList")
	@ResponseBody  //返回给用户的java对象会被mvc转换成Json格式的数据返回给用户。
	public SysUser userWsList(){		
		return userService.getSUList().get(0);
	}

配置转换器
applicationContext-mvc.xml

<mvc:annotation-driven></mvc:annotation-driven>

四.拦截器

简介:

Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自定义一些拦截器来实现特定的功能。

过滤器和拦截器的区别:

① 过滤器:

  1. servlet规范中的一部分,任何java web工程都可以使用
  2. 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

② 拦截器:

  1. 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用 拦截器
  2. 只会拦截访问的控制器方法,
    如果访问的是jsp/html/css/image/js是不会进行拦截的
自定义拦截器的步骤

1.配置spring mvc 拦截器

<mvc:interceptors>
		<mvc:interceptor>
			<!-- mvc:mapping 中配置需要拦截的路径 -->
			<mvc:mapping path="/**"/>
			
			<!--exclude-mapping 中配置需要剔除拦截的路径 -->
			<mvc:exclude-mapping path="/ws/userWsList"/>
			<bean class="com.wmy.mvc.interceptor.MyHandlerInterceptor"></bean>
		</mvc:interceptor>
		
		<mvc:interceptor>
			<!-- mvc:mapping 中配置需要拦截的路径 -->
			<mvc:mapping path="/userInfoRest/**"/>
			<bean class="com.wmy.mvc.interceptor.MySecondInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

2.自定义拦截器

public class MyHandlerInterceptor implements HandlerInterceptor{

	/**
	 * preHandle方法在handler方法执行之前拦截用户的请求,如果返回false,表示中断后续操作,如果返回true,表示向下继续执行。
	 */
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("=======MyHandlerInterceptor==========>preHandle");
		return true;
	}

	/**
	 * postHandle 该方法在handler方法调用之后,解析视图之前执行;我们可以通过此方法对请求域中的modle和view进行修改
	 */
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		
		if(modelAndView != null) {
			modelAndView.setViewName("success");
		}
		
		System.out.println("=======MyHandlerInterceptor==========>postHandle");
	}

	/**
	 * afterCompletion 此方法在handler方法执行完毕之后(视图渲染结束),我们可以通过此方法释放资源,记录日志等操作,及异常处理
	 */
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("=======MyHandlerInterceptor==========>afterCompletion");
	}
}

3.Controller

@Controller
@RequestMapping("ws")
public class WebServiceController {

	@Autowired
	private UserService userService;
	@RequestMapping("userWsList")
	@ResponseBody  //返回给用户的java对象会被mvc转换成Json格式的数据返回给用户。
	public List<SysUser> userWsList(){
		System.out.println("-------------------经过handler方法==============");
		return userService.getSUList();
	}
	
	
	@RequestMapping("getData")
	@ResponseBody
	public String getData(@RequestBody List<SysUser> userList) {		
		System.out.println("--------------msg:" + userList);		
		return "success!";
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值