SpringMVC视频学习笔记
学习MVC框架的流程
基于SpringMVC实现简单的用户管理1、搭建环境1.导入jar包a.导入spring的jar包b.导入commons-logging-xxx.jar2.配置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技术
1些技能
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 当要使用taglib标签库是,需要配置这个属性。但spring3.0.5以后默许会加上这个属性 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
下面是1个列子User.javapublic 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","李4","234@163.com"));
users.put("we",new User("we","王5","345@163.com"));
users.put("sj",new User("sj","世杰","456@163.com"));
users.put("yp",new User("yp","1平","567@163.com"));
users.put("ww",new User("ww","微微","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.jspUserController.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.javaupdate.jsp删除用户list.jsp 用户列表页面UserController.java6、其他功能1.登录login.jspUserController.java(将图片拖出,放大看)UserException.java上面这类异常处理只能处理局部异常,不太好用,所以需要进行前期的异常处理,可以在springmvc.xml配置文件中来配置。 error.jsp添加静态文件,如main.css
在页面中引入静态文件: 显示结果以下: 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.编写Controller3.结果比较使用@RequestBody注解和jackson : 不使用它们: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |