SpringMVC视频学习笔记

学习MVC框架的流程

1、搭建环境
2、如何完成Controller和Viewer的映照
3、如何把值传递给Controller
6、页面标签
7、文件上传
8、深入1下源代码

基于SpringMVC实现简单的用户管理

这里写图片描述

1、搭建环境

1.导入jar包

a.导入spring的jar包

这里写图片描述

b.导入commons-logging-xxx.jar

这里写图片描述

2.配置web.xml

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 如果不配置这个,那末 就必须在/WEB-IN/下创建文件名为springmvc-servlet的.xml文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 在src目录下或自己创建的"Source Floder"目录下新建springmvc.xml -->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

3.创建springmvc.xml文件

<?xml version="1.0" encoding="UTF⑻"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans⑶.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop⑶.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context⑶.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc⑶.0.xsd"
>

</beans>

1.使用非注解方式进行配置,在springmvc.xml添加以下代码

<!-- 非注解方式 -->
<bean name="/welcome.html" class="com.wen.controller.WelcomeController"></bean>

<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

WellcomeController.java代码以下:

public class WelcomeController extends AbstractController {

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req,
HttpServletResponse resp) throws Exception {
System.out.println("Welcome");
ModelAndView mav = new ModelAndView();
//则返回的视图为/WEB-INF/jsp/welcome.jsp
mav.setViewName("welcome");
//在wellcome.jsp中可使用${msg}获得'welcome to spring MVC'
mav.addObject("msg", "welcome to spring MVC");
return mav;
}

}

上面这类非注解方式来映照视图的方式几近不会使用

2.使用注解方式

springmvc.xml的配置以下:

<!-- 使用注解方式 -->
<!-- 打开注解 -->
<mvc:annotation-driven/>
<!-- 扫描包 -->
<context:component-scan base-package="com.wen.controller"/>

<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

HelloController.java代码以下:

//@RequestMapping表示用哪一个url来对应
@RequestMapping(value={"/hello","/"})
//@RequestParam注解参数
//如http://xxx/hello?username=zhangsan
//使用Map<String, Object> context来将数据传递到hello.jsp页面
public String hello(@RequestParam(value="username",required=false)String name, Map<String, Object> context){
System.out.println("hello " + name);
context.put("username", name);
return "hello";
}

但更建议使用Model来传递数据,代码以下

@RequestMapping(value="welcome")
public String welcome(String username,Model model){
//使用model.addAttribute来传递数据
//如http://xxx/welcome?username=zhangsan
model.addAttribute("msg", "welcome to spring MVC");
model.addAttribute("name", username);
return "welcome";
}

4、REST简介

REST的风格不等于使用了REST技术

user为路径,120为user_id
查询用户:user/120———————查询id=120的用户
删除用户:user/120/delete————删除id=120的用户
更新用户:user/120/update———–更新id=120的用户信息

1些技能

当jsp页面中需要使用标签库时(如:需要使用< c:forEach>)
1.首先需要导入jstl⑴.x.jar包
这里写图片描述
2.需要在jsp页面中加入以下代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

这里写图片描述

3.同时,需要在springmvc.xml的视图解析器配置中加入以下代码:

<!-- 当要使用taglib标签库是,需要配置这个属性。但spring3.0.5以后默许会加上这个属性 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

这里写图片描述

如果要使用验证,则需要导入下面这个包
这里写图片描述
JSR303使用帮助
用法举例:
在User.java中的get方法上面使用验证注解
这里写图片描述
在Controller方法中:
这里写图片描述
在add.jsp中:
这里写图片描述
结果以下:
这里写图片描述

下面是1个列子

这里写图片描述

User.java
public class User {
private String username;
private String password;
private String nickname;
private String email;

//默许构造函数
public User(){

}

public User(String username, String password, String nickname, String email) {
super();
this.username = username;
this.password = password;
this.nickname = nickname;
this.email = email;
}

//省略setter和getter方法

add.jsp 添加用户的页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF⑻"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF⑻">
<title>添加用户</title>
</head>

<body>
<!-- modelAttribute="user",会自动将表单中的值添加到User中 -->
<!-- 此时没有写action,直接提交给/add,但此时是POST方式提交,会 使用method=RequestMethod.POST注解的方法-->
<sf:form method="post" modelAttribute="user">
<!-- path相当于input中的name属性 -->
Username:<sf:input path="username"/><br>
Password:<sf:password path="password"/><br>
Nickname:<sf:input path="nickname"/><br>
Email:<sf:input path="email"/><br>
<input type="submit" value="添加用户"/>
</sf:form>
</body>
</html>

UserController.java
@Controller
@RequestMapping("/user")
public class UserController {

private Map<String, User> users = new HashMap<String, User>();
//默许构造函数
public UserController(){
users.put("zs", new User("zs", "123", "张3", "123@163.com"));
users.put("ls", new User("ls", "123", "李4", "234@163.com"));
users.put("we", new User("we", "123", "王5", "345@163.com"));
users.put("sj", new User("sj", "123", "世杰", "456@163.com"));
users.put("yp", new User("yp", "123", "1平", "567@163.com"));
users.put("ww", new User("ww", "123", "微微", "678@163.com"));
}

@RequestMapping(value="/users", method=RequestMethod.GET)
public String list(Model model){
model.addAttribute("users", users);
return "user/list";
}

//连接到add页面时是GET要求,会访问这段代码
@RequestMapping(value="/add", method=RequestMethod.GET)
public String add(Model model){
//必须添加1个User,不然在add.jsp中
//modelAttribute="user"的user没法获得
model.addAttribute(new User());
//服务器端跳转:自动加上"forward:"
return "user/add";
}

//除上面1种方式,我更喜欢下面这类
//@RequestMapping(value="/add", method=RequestMethod.GET)
//public String add(@ModelAttribute("user") User user){
// return "user/add";
//}

//在具体添加用户时,是POST要求,会访问这段代码
@RequestMapping(value="/add", method=RequestMethod.POST)
public String add(User user){
users.put(user.getUsername(), user);
//客户端跳转:使用"redirect:"
return "redirect:/user/users";
}
}

由于在页面中使用了中文,需要在web.xml中添加字符编码过滤器

<!-- 编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF⑻</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2016⑼⑵0 23:28:32 未完待续

接续:

5、REST风格实例

1.显示某个用户的信息

list.jsp

这里写图片描述
这里写图片描述

UserController.java
//显示某个用户的方法
//@PathVariable String username表示使用路径中的{username}来最为参数
@RequestMapping(value="/{username}", method=RequestMethod.GET)
public String show(@PathVariable String username, Model model){
//通过username取得User对象
//在show.jsp页面中通过${user}来获得对象
model.addAttribute(users.get(username));
return "user/show";
}

这里写图片描述

2.更新某个用户的信息

list.jsp 用户列表页面

这里写图片描述

UserController.java

这里写图片描述

update.jsp

这里写图片描述
这里写图片描述

删除用户

list.jsp 用户列表页面

这里写图片描述
这里写图片描述

UserController.java

这里写图片描述

6、其他功能

1.登录

login.jsp

这里写图片描述
这里写图片描述

UserController.java(将图片拖出,放大看)

这里写图片描述
这里写图片描述

UserException.java

这里写图片描述
上面这类异常处理只能处理局部异常,不太好用,所以需要进行前期的异常处理,可以在springmvc.xml配置文件中来配置。
这里写图片描述

error.jsp

这里写图片描述

添加静态文件,如main.css

这里写图片描述

由于在web.xml中配置的DispatchServlet拦截的路径为”/”
所以静态文件也将被servlet拦截,从而没法获得
所以需要在在springmvc.xml中为静态文件进行配置,配置以下
这里写图片描述

在页面中引入静态文件:
这里写图片描述
显示结果以下:
这里写图片描述

7、文件上传

1.导入文件上传所需的Jar包

*这里尽可能用最新的jar包,将我用的commons-io⑴.4换成commons-io⑵.x.jar版本
不然后面会有问题*

这里写图片描述

2.add.jsp中表单的写法

这里写图片描述
这里写图片描述

3.控制层中的写法

这里写图片描述

4.(很重要)需要在springmvc中进行配置,不然没法上传文件

这里写图片描述

5.上面的控制层并没有真实的实现文件上传

只是在控制台打印了上传文件的1些信息
这里写图片描述
现在我们来实现真实的上传文件
这里写图片描述
这个需要贴上代码:

//在具体添加用户时,是POST要求,会访问这段代码
@RequestMapping(value="/add", method=RequestMethod.POST)
public String add(@Valid User user,BindingResult br, @RequestParam("attach") MultipartFile attach,
HttpServletRequest req) throws IOException{//1定要紧跟Validate以后写验证结果类
if(br.hasErrors()){
//如果有毛病直接挑战到add视图中
return "user/add";
}
//取得"resources/upload"的实际路径
String realpath = req.getSession().getServletContext().getRealPath("/resources/upload");
System.out.println(realpath);
//取得文件要保存的路径和文件名
String pathname = realpath + "/" + attach.getOriginalFilename();
//创建文件
File f = new File(pathname);
FileUtils.copyInputStreamToFile(attach.getInputStream(), f);
System.out.println(attach.getName()+","+attach.getOriginalFilename()+","+attach.getContentType());
users.put(user.getUsername(), user);
//客户端跳转:使用"redirect:"
return "redirect:/user/users";
}

上传成功
这里写图片描述
这里写图片描述

8、多文件上传

1.对add.jsp略加改动

这里写图片描述
这里写图片描述

2.对UserController.java略加改动

这里写图片描述
上传成功
这里写图片描述
这里写图片描述
但是,这里有1个问题需要特别注意
这里写图片描述
这里写图片描述
怎样解决?很简单,看下面
这里写图片描述
好了,文件上传就讲到这里就应当差不多了吧,呵呵。

9、使用JSON

终究讲到这里了,真是要哭了,555555~~~

springmvc怎样返回JSON数据?

1.导入jackson的jar包

这里写图片描述

2.编写Controller

这里写图片描述

3.结果比较

使用@RequestBody注解和jackson :
这里写图片描述
不使用它们:
这里写图片描述

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » SpringMVC视频学习笔记

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡