Java - 框架之 SpringMVC
一. 简单配置 (XML)
1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 配置:所有请求由SpringMVC管理 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
2. DispatchServlet-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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 1. 配置 url 处理映射 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 2.配置控制器处理适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 3. 配置控制器 (访问路径) -->
<bean name="/user.do" class="com.q.backoffice.web.controller.UserController" /> <!-- 4. 配置资源视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/views/"></property> <!-- 后缀 -->
<property name="suffix" value=".jsp"></property>
</bean> </beans>
3. UserController.java
package com.q.backoffice.web.controller; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class UserController implements Controller { @Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView mav = new ModelAndView("user/userlist"); mav.addObject("name", "q"); return mav;
}
}
4. userlist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户列表</title>
</head>
<body> <h3>用户列表</h3>
${name} </body>
</html>
二. 简单配置 (注解)
1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 配置:所有请求由SpringMVC管理 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
2. DispatcherServlet-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 配置:所有请求由SpringMVC管理 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
3. UserController
@Controller
@RequestMapping("/user") // 根路径
public class UserController{ // 获取页面
@RequestMapping("/list")
public String list(){
return "user/userlist";
} }
三. 获取表单发送的数据
1. 三种方式:
// 获取表单发送的数据,方式一(在方法中传递参数):
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(String username, String password, int age, String birthday, String[] hobbyIds){ System.out.println(username);
System.out.println(password);
System.out.println(age);
System.out.println(birthday);
System.out.println(Arrays.toString(hobbyIds)); return "user/register";
}
// 获取表单发送的数据,方式二 (创建一个User类):
@RequestMapping("/register2")
public String register2(User user){
System.out.println(user);
return "user/register";
}
// 获取表单发送的数据,方式三(在类中嵌套一个类,需要在页面中加上 类属性:user.username):
@RequestMapping("/register3")
public String register3(UserExt user){
System.out.println(user);
return "user/register";
}
2. 接收 ArrayList 类型数据
设置(记得 set/get 方法):
private List<User> users = new ArrayList<User>();
发送:
// 一个 user对象
<input type="text" name="user[0].username"> // 两个 user对象
<input type="text" name="user[1].username">
接收:
public String register(UserExt userExt){
System.out.println(userExt.getUsers());
reutrn "user/info";
}
3. 接收 Map 类型数据
设置(记得 set/get 方法):
private Map<String, Object> info = new HashMap<String, Object>();
发送:
<input type="text" name="info["username"]">
接收:
public String register(UserExt userExt){
System.out.println(userExt.getInfo());
reutrn "user/info";
}
四. 展示数据
1. UserController.java
@RequestMapping("userlist")
public String register4(Model model){
// 模拟数据库数据
List<User> userList = new ArrayList<User>();
User user1 = new User("q","123",1,"2018");
user1.setId(1);
User user2 = new User("q2","456",1,"2018");
user2.setId(2);
userList.add(user1);
userList.add(user2);
// 将数据存储到 Modle 中
model.addAttribute("userList",userList);
return "user/userlist";
}
2. userlist.jsp
<table border="1">
<tr>
<td>账号</td>
<td>密码</td>
<td>年龄</td>
<td>生日</td>
</tr> <c:forEach items="${userList}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.age}</td>
<td>${user.birthday}</td>
</tr>
</c:forEach> </table>
五. 修改数据
1. 方式一:
// 修改数据1:
@RequestMapping("/edit")
public String register5(int id, Model model){ // 模拟数据库数据
User user = new User("q","123",1,"2018/1/1");
user.setId(1);
model.addAttribute("user", user); return "user/edit";
}
# 页面设置:
<a href="${pageContext.request.contextPath}/user/edit.do?id=${user.id}">修改1</a>
2. 方式二:
// 修改数据2:
@RequestMapping("/edit/{id}")
public String register5(Model model){ // 模拟数据库数据
User user = new User("q","123",1,"2018/1/1");
user.setId(1);
model.addAttribute("user", user); return "user/edit";
}
# 页面设置:
<a href="${pageContext.request.contextPath}/user/edit/${user.id}.do">修改2</a>
六. 转发
@RequestMapping("test1")
public String run1(){
// 同一个控制器的转发
return "forward:list.do";
}
七. 重定向
@RequestMapping("test2")
public String run2(){
// 同一个控制器的转发
return "redirect:list.do";
}
八. 路径指定参数(如果没有该参数,就会抛异常)
// defaultValue 设置默认值(即使没有该参数也会跳转)
@RequestMapping("test3")
public String run3(@RequestParam(value = "uid", required = true, defaultValue = "1") Integer id){
System.out.println(id);
return "redirect:list.do";
}
八. 接收和响应 json 数据
package com.q.backoffice.web.controller; import model.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; @Controller
@RequestMapping("/student") // 根路径
public class UserController3 { @RequestMapping("/register")
public String register(){ return "student/register";
} // 接收和相应 Json 数据 /*
* @RequestBody :将 json 数据转换成模型对象
* @ResponseBody :返回 json 数据,把对象转换为字符串返回
* */ @RequestMapping("/get")
public @ResponseBody Student get_json(@RequestBody Student s){
System.out.println(s);
return s;
} @RequestMapping("/get1")
public @ResponseBody Student get_json1(Student s){
System.out.println(s);
return s;
} }
也许每个人都是无聊的,孤独的吧?
Java - 框架之 SpringMVC的更多相关文章
- java框架之springmvc
一.HelloWorld程序 (1)导包:四个spring 核心包(core.beans.context.expression).一个aop包.两个 web 包和一个logging 包: (2)配置 ...
- java框架之SpringMVC(1)-入门&整合MyBatis
前言 SpringMVC简介 SpringMVC 是一个类似于 Struts2 表现层的框架,属于 SpringFramework 的后续产品. 学习SpringMVC的原因 SpringMVC 与 ...
- Java框架之SpringMVC 03-RequestMapping-请求数据-响应数据
SpringMVC SpringMVC是一种轻量级的.基于MVC的Web层应用框架. 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 采用了松散耦合可插拔组件结构,比 ...
- java框架之SpringMVC(2)-补充及拦截器
高级参数绑定 package com.zze.springmvc.web.controller; import org.springframework.stereotype.Controller; i ...
- Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程
SpringMVC 拦截器 Spring MVC也可以使用拦截器对请求进行拦截处理,可以自定义拦截器来实现特定的功能,自定义的拦截器可以实现HandlerInterceptor接口中的三个方法,也可以 ...
- Java框架之SpringMVC 04-视图解析-Spring表单-JSON-上传下载
SpringMVC 视图解析 请求处理方法(controller方法)执行完成后,最终返回一个 ModelAndView 对象,即使出现异常也会返回一个 ModelAndView 对象.对于那些返回 ...
- Java自学路线图之Java框架自学
Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...
- java框架之SpringBoot(5)-SpringMVC的自动配置
本篇文章内容详细可参考官方文档第 29 节. SpringMVC介绍 SpringBoot 非常适合 Web 应用程序开发.可以使用嵌入式 Tomcat,Jetty,Undertow 或 Netty ...
- 2016年7款最佳 Java 框架
毫无疑问,Java 是目前最为流行的编程语言之一,这里我们挖掘出了一些比较受欢迎的框架的有效信息,它们可以减轻全球软件开发人员的日常工作. RebelLabs的一项调查显示,通过在线Java用户论坛( ...
随机推荐
- linux-pdb命令行下python断点调试工具
一般地,我们可以使用如下的方式进入调试(比如我们要调试的源文件为hello.py): 1. 在命令行启动目标程序,加上-m参数. python -m pdb hello.py 这样程序会自动停在第 ...
- STS,修改Ctrl+Shift+R匹配类的配置
在使用STS(Spring Tools)时,每次通过Ctrl+Shift+R查询类时,会出来一堆不想看到的类.如下所示: 上面的.class文件和父项目中的.java文件,在匹配类时,是不想看到的. ...
- Java开发笔记(一百二十五)AWT图像加工
前面介绍了如何使用画笔工具Graphics绘制各种图案,然而Graphics并不完美,它的遗憾之处包括但不限于:1.不能设置背景颜色:2.虽然提供了平移功能,却未提供旋转功能与缩放功能:3.只能在控件 ...
- 27 多线程(一)——创建进程的三种方法、线程锁(同步synchornized与lock)
线程的流程 线程的创建 有三种方法,重点掌握前两种: 继承Thread类 实现Runnable接口(推荐使用:避免单继承的局限性) 实现Callable接口 根据java的思想,要少用继承,多用实现. ...
- C语言实现简单的计算器(加、减、乘、除)
利用运算符做为swich case 语句条件,实现简单程序的编写;并且对输入的运算做判断,除数为零也需做判断; #include<stdio.h> int add(int a, int ...
- 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)
原文:使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死) 在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置.当使用跨进程设置窗口的父子关系时,你需要注意 ...
- C#中Unity对象的注册方式与生命周期解析
1.示例代码 请详细阅读 static void Main(string[] args) { { Console.WriteLine("----------全局设置----------&qu ...
- 转 如何在调用WCF服务之前弹出一个确认对话框
自定义InteractiveChannelInitializer(InvocationConfirmationInteractiveChannelInitializer)定义如下.我们在BeginDi ...
- MQ相关
1. 如何保证消息按顺序执行 2. 如何保证消息不重复消费 3. 如何保证消息不丢失 4.RabbitMQ Java Client简单生产者.消费者代码示例
- php后台实现页面跳转的方法-转载
地址:http://blog.csdn.net/abandonship/article/details/6459104 其中方法三的js代码在tp框架使用存在故障,一个是需要把代码写在一起(可能也不需 ...