一.实现增删改查
第一种方法
开头
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";
}
}
注意
- 对于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>
- 在mvc的handler方法中定义MultipartFile类型来接收用户上传的文件
- 在应用上下文中配置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,用于对处理器进行预处理和后处理。开发者可以自定义一些拦截器来实现特定的功能。
过滤器和拦截器的区别:
① 过滤器:
- servlet规范中的一部分,任何java web工程都可以使用
- 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截
② 拦截器:
- 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用 拦截器
- 只会拦截访问的控制器方法,
如果访问的是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!";
}
}