Spring MVC 基础

Spring MVC 项目案件见附件

导包

配置web.xml启动Spring MVC
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Spring3MVC</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

创建一个以web.xml配置的springMVC servlet名称的文件如:spring-servlet.xml文件名
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan
base-package="com.springmvc.controller" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>

rest风格传参,注入@RequestParam的参数,参数就是地址的一部分,是必需的,如果没有就找404
@RequestMapping({"/hi","/"})
public String hello(@RequestParam("userName") String userName){
System.out.println(userName);
return "hi";
}

1.使用Map
把数据带回view
@RequestMapping({ "/hi", "/" })
public String hello(@RequestParam("userName") String userName,
Map<String, Object> context) {
System.out.println(userName);
context.put("userName", userName);
return "hi";
}
2.使用Model
@RequestMapping({ "/hi", "/" })
public String hello(String userName,
Model model) {
System.out.println(userName);
model.addAttribute("userName", userName);
return "hi";
}
<body>
hello ${userName}
</body>

实例一个user到创建页面

方式1
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(Model model) {
model.addAttribute(new User());
return "user/add";
}
方式2
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(@ModelAttribute("user") User user) {
return "user/add";
}

//服务器端验证,可以使用JSR 303 - Bean Validation
1.在bean类里需要验证的字段,使用相应的注解
public class User {
private String userName;
private String password;
private String nikeName;
private String email;

public User(){}
public User(String userName, String password, String nikeName, String email) {
this.userName = userName;
this.password = password;
this.nikeName = nikeName;
this.email = email;
}

@NotBlank(message="用户不能为空")
public String getUserName() {
return userName;
}

2.controller难度的参数加@Validated注解,后面一定要跟着BindingResult
@RequestMapping(value = "/{userName}/update", method = RequestMethod.POST)
public String update(@PathVariable String userName, @Validated User user,
BindingResult br) {
if (br.hasErrors()) {
return "user/update";
}
users.put(userName, user);
return "redirect:/user/users";
}
3.spring-servlet.xml
启用MVC注解<mvc:annotation-driven />

异常处理,可以使用局部处理,还有全局处理异常

public class UserException extends RuntimeException {
...
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(String userName, String password, HttpSession session) {
if (!users.containsKey(userName)) {
throw new UserException("用户名不存在!");
}
User u = users.get(userName);
if (!u.getPassword().equals(password)) {
throw new UserException("用户密码不正确!");
}
session.setAttribute("loginUser", u);
return "redirect:/user/users";
}

1.局部异常处理
/**
* 局部异常处理
*/
// @ExceptionHandler(value={UserException.class})
// public String handlerException(UserException e,HttpServletRequest req){
// req.setAttribute("e", e);
// return "error";
// }

2.全局异常处理
<!-- 全局异常处理 -->
<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="com.springmvc.model.UserException">error</prop>
</props>
</property>
</bean>

单文件上传
<body>
<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
userName:<sf:input path="userName"/><sf:errors path="userName"/><br />
password:<sf:input path="password"/><sf:errors path="password"/><br />
nikeName:<sf:input path="nikeName"/><br />
email:<sf:input path="email"/><br />
attach:<input type="file" name="attach" />
<input type="submit" value="提交" />
</sf:form>
</body>

spring-servlet.xml
<!-- 设置MultipartResolver才能完成上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"></property>
</bean>

controller
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(@Validated User user, BindingResult br,
MultipartFile attach, HttpServletRequest req) throws IOException {
if (br.hasErrors()) {
return "user/add";
}
String path = req.getSession().getServletContext()
.getRealPath("/resources/upload");
File file = new File(path + "/" + attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(), file);

System.out.println(path);
//
// System.out.println(attach.getName() + ","
// + attach.getOriginalFilename() + "," + attach.getContentType());
users.put(user.getUserName(), user);
return "redirect:/user/users";
}

多文件上传
attach:<input type="file" name="attachs" />
attach:<input type="file" name="attachs" />
attach:<input type="file" name="attachs" />
attach:<input type="file" name="attachs" />

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(@Validated User user, BindingResult br,
@RequestParam("attachs") MultipartFile[] attachs,
HttpServletRequest req) throws IOException {
if (br.hasErrors()) {
return "user/add";
}
String path = req.getSession().getServletContext()
.getRealPath("/resources/upload");
for (MultipartFile attach : attachs) {
if(attach.isEmpty()) continue;
File file = new File(path + "/" + attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(), file);
}

System.out.println(path);
//
// System.out.println(attach.getName() + ","
// + attach.getOriginalFilename() + "," + attach.getContentType());
users.put(user.getUserName(), user);
return "redirect:/user/users";
}

返回json数据 :http://localhost:8080/SpringMVC/user/sdy?json

@RequestMapping(value = "/{userName}", method = RequestMethod.GET,params="json")
@ResponseBody
public User show(@PathVariable String userName) {
return users.get(userName);
}

时间: 2024-08-07 00:13:45

Spring MVC 基础的相关文章

Spring MVC 基础

Spring MVC 基础 1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层面上给我们帮助,无法在思考和过程上帮助我们,而我们很多人都不喜欢思考和尝试. 2.实现Web MVC的基础 实现Web MVC基础可以概括为1个前段控制器和2个映射. (1)前端控制器FrontController ASP.NET和JSP都是以Page路径和URL一一对应

Spring MVC 基础篇 1

Spring MVC基础篇  @RequestMapping使用 [email protected]RequestMapping 注解 进行请求映射 (1)指定Controller或者Method可以处理那些url请求. (2)适用范围:类定义上或者方法定义上都可以加. (3)在类定义处添加该注解是相对于WEB应用的根目录,在方法处是对类定义的请求处理的进一步细化.可以在类定义上没有添加该注解,但是方法定义上有该注解,此时 方法处的该注解标记的URL就是相对于WEB应用根目录. (4) 思考:此

Java Web系列:Spring MVC 基础

1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层面上给我们帮助,无法在思考和过程上帮助我们,而我们很多人都不喜欢思考和尝试. 2.实现Web MVC的基础 实现Web MVC基础可以概括为1个前段控制器和2个映射. (1)前端控制器FrontController ASP.NET和JSP都是以Page路径和URL一一对应,Web MVC要通过URL

Spring MVC 基础入门二

单个接收表单提交的参数 在实际开发中通过会在spring MVC的Controller里面接收表单提交过来的参数,这块代码该怎么去编写呢? 示例: 编写一个带有表单的jsp: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> &l

Spring MVC基础知识整理?View与Controller数据交互

概述 Spring MVC是由View—Controller—Model组成,其中View和Controller的数据交互,成为了关注的核心点.MVC中,我们将View中的数据传递到Controller,可以采用POST或者Get,传递相应的参数.Controller通过绑定来,匹配前台传递的参数.后台Controller也可以将值传递到前台页面. View值传递Controller 绑定传值的常用方式有如下 @RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上

Spring MVC 基础篇 6

Spring MVC 视图解析器 1.请求直接进入页面,不经过Controller <!-- 配置直接转发的页面,请求直接进入页面,而无需再经过Controller方法 --> <mvc:view-controller path="/success" view-name="success"/> <!-- 在实际开发中通常都需要配置 mvc:annotation-driven 标签 --> <mvc:annotation-dr

Spring MVC 基础篇4

Spring MVC Controller中返回数据到页面 1.使用ModelAndView 进行数据返回到请求页面 2.利用Map类型的入参进行Controller返回到页面上 3.将数据放到Session域中,从而实现多个请求之间共享属性值

Spring MVC基础知识整理?Spring+SpringMVC+Hibernate整合操作数据库

概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibernate使用方便,配置响应的XML文件即可.由于spring3.x,基于asm的某些特征,而这些asm还没有用jdk8编译,所以采用Spring 3+JDK8就会报错,提示错误信息( java.lang.IllegalArgumentException),具体解决方案有:1.Spring 3+JDK7

Spring MVC基础知识整理?国际化和异常处理

概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. 国际化 Spring对国际化的语言采用配置的方式存储到配置文件中,在springservletconfig.xml文件,添加下面语句: <bean id="messageSource" class="org.springframework.context.support.

Spring MVC 基础篇 2

Spring MVC 与rest支持 [email protected] 映射URL绑定的占位符 通过@PathVariable可以将URL上占位符参数绑定到控制器处理方法的入参中:URL中的{XXX}占位符可以通过@PathVariable("xxx")绑定到操作方法的入参中. @RequestMapping(value="/hello/{name}") public String hello(@PathVariable("name") Str