程序员人生 网站导航

SpringMVC视频学习笔记

栏目:php教程时间:2016-10-07 10:25:56

学习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 :
这里写图片描述
不使用它们:
这里写图片描述

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐