一,Controller层方法(Action)参数映射

1,自动参数映射

1.1,基本数据类型参数映射

方法的参数可以是任意基本数据类型,如果方法参数名与http中请求的参数名称相同时会进行自动映射。例如:

ActionController:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: returnAction
  7. * @描述: 自动参数映射---基本数据类型
  8. * @param model
  9. * @param i
  10. * @param s
  11. * @return 返回视图名称
  12. * @创建人 Zender
  13. */
  14. @RequestMapping("/returnAction")
  15. public String returnAction(Model model, int i, String s) {
  16. model.addAttribute("message", "i:" + i + ",s:" + s);
  17. return "index";
  18. }
  19. }

Index.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 内容:${message}
  11. </body>
  12. </html>

运行结果:

1.2,自定义数据类型参数映射

自定义的POJO对象,Spring MVC会通过反射把请中的参数设置到对象中,转换类型,例如:

Person:

  1. public class Person {
  2. private int id;
  3. private String name;
  4. private String addrs;
  5. public int getId() {
  6. return id;
  7. }
  8. public void setId(int id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public String getAddrs() {
  18. return addrs;
  19. }
  20. public void setAddrs(String addrs) {
  21. this.addrs = addrs;
  22. }
  23. public Person(int id, String name, String addrs) {
  24. this.id = id;
  25. this.name = name;
  26. this.addrs = addrs;
  27. }
  28. public Person() {
  29. }
  30. @Override
  31. public String toString() {
  32. return "Person [id=" + id + ", name=" + name + ", addrs=" + addrs + "]";
  33. }
  34. }

ActionController:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: returnPersonAction
  7. * @描述: 自动参数映射---自定义数据类型
  8. * @param model
  9. * @param person
  10. * @return 返回视图名称
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/returnPersonAction")
  14. public String returnPersonAction(Model model, Person person){
  15. model.addAttribute("person", person.toString());
  16. return "index";
  17. }
  18. }

index.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 内容:${person}
  11. </body>
  12. </html>

运行结果:

1.3,复杂数据类型参数映射

复杂数据类型指的是一个自定义类型中还包含另外一个对象类型,或者包含集合,Map等等对象类型,例如如下Pojo类:

  1. public class SysUser {
  2. private String userName;
  3. private String userPwd;
  4. private Person person;
  5. public String getUserName() {
  6. return userName;
  7. }
  8. public void setUserName(String userName) {
  9. this.userName = userName;
  10. }
  11. public String getUserPwd() {
  12. return userPwd;
  13. }
  14. public void setUserPwd(String userPwd) {
  15. this.userPwd = userPwd;
  16. }
  17. public Person getPerson() {
  18. return person;
  19. }
  20. public void setPerson(Person person) {
  21. this.person = person;
  22. }
  23. public SysUser(String userName, String userPwd, Person person) {
  24. this.userName = userName;
  25. this.userPwd = userPwd;
  26. this.person = person;
  27. }
  28. public SysUser() {
  29. }
  30. @Override
  31. public String toString() {
  32. return "SysUser [userName=" + userName + ", userPwd=" + userPwd + ", person=" + person + "]";
  33. }
  34. }

Index.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"
  6. + request.getServerName() + ":" + request.getServerPort()
  7. + path + "/";
  8. %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  13. <title>Insert title here</title>
  14. </head>
  15. <body>
  16. <form method="post" action="Action/returnSysUserAction">
  17. username:<input name="userName" /><br/>
  18. userpwd:<input name="userPwd" /><br/>
  19. id:<input name="person.id" /><br/>
  20. name:<input name="person.name" /><br/>
  21. addrs:<input name="person.addrs" /><br/>
  22. <button>提交</button>
  23. </form>
  24. </body>
  25. </html>

return.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 内容:${sysUser}
  11. </body>
  12. </html>

ActionController:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: returnSysUserAction
  7. * @描述: 自动参数映射---复杂数据类型
  8. * @param model
  9. * @param sysUser
  10. * @return 返回视图名称
  11. * @创建人 Zender
  12. * @创建时间 2017年12月10日下午6:33:43
  13. */
  14. @RequestMapping("/returnSysUserAction")
  15. public String returnSysUserAction(Model model, SysUser sysUser){
  16. model.addAttribute("sysUser", sysUser.toString());
  17. return "return";
  18. }
  19. }

运行结果:

1.4,集合类型参数映射

List集合类型:

不能直接在方法(action)的参数中指定List<T>类型,定义一个类型包装List集合在其中,例如:

  1. public class PersonList {
  2. private List<Person> list;
  3.  
  4. public List<Person> getList() {
  5. return list;
  6. }
  7.  
  8. public void setList(List<Person> list) {
  9. this.list = list;
  10. }
  11. }

定义方法(action)代码如下:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: returnListAction
  7. * @描述: 自动参数映射---List数据类型
  8. * @param model
  9. * @param personList
  10. * @return
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/returnListAction")
  14. public String returnListAction(Model model, PersonList personList){
  15. model.addAttribute("personList", personList.getList().get(0).toString());
  16. return "return";
  17. }
  18. }

表单页面如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"
  6. + request.getServerName() + ":" + request.getServerPort()
  7. + path + "/";
  8. %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <base href="<%=basePath%>" />
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  14. <title>List</title>
  15. <link href="css/bootstrap.css" rel="stylesheet">
  16. <script src="js/jquery-3.2.1.js"></script>
  17. <script src="js/bootstrap.js"></script>
  18. </head>
  19. <body>
  20. <form class="form-horizontal" action="<%=request.getContextPath()%>/Action/returnListAction" role="form" method="post">
  21. <div class="form-group">
  22. <label for="firstname" class="col-sm-1 control-label">id</label>
  23. <div class="col-sm-3">
  24. <input type="text" class="form-control" name="list[0].id"
  25. placeholder="请输入id">
  26. </div>
  27. </div>
  28. <div class="form-group">
  29. <label for="lastname" class="col-sm-1 control-label">名字</label>
  30. <div class="col-sm-3">
  31. <input type="text" class="form-control" name="list[0].name"
  32. placeholder="请输名字">
  33. </div>
  34. </div>
  35. <div class="form-group">
  36. <label for="lastname" class="col-sm-1 control-label">地址</label>
  37. <div class="col-sm-3">
  38. <input type="text" class="form-control" name="list[0].addrs"
  39. placeholder="请输地址">
  40. </div>
  41. </div>
  42. <div class="form-group">
  43. <div class="col-sm-offset-1 col-sm-3">
  44. <button type="submit" class="btn btn-default">提交</button>
  45. <button type="reset" class="btn btn-default">重置</button>
  46. </div>
  47. </div>
  48. </form>
  49. </body>
  50. </html>

表单向服务器提交数据,提交后结果如下:

Map集合类型:

Map与List的实现方式基本一样,同样需要包装Map类型,例如:

  1. public class PersonMap {
  2. private Map<String,Person> map;
  3.  
  4. public Map<String, Person> getMap() {
  5. return map;
  6. }
  7.  
  8. public void setMap(Map<String, Person> map) {
  9. this.map = map;
  10. }
  11. }

定义方法(action)代码如下:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: returnMapAction
  7. * @描述: 自动参数映射---Map数据类型
  8. * @param model
  9. * @param personMap
  10. * @return
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/returnMapAction")
  14. public String returnMapAction(Model model, PersonMap personMap){
  15. model.addAttribute("personMap", personMap.getMap().get("user1").toString());
  16. return "return";
  17. }
  18. }

表单页面如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"
  6. + request.getServerName() + ":" + request.getServerPort()
  7. + path + "/";
  8. %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <base href="<%=basePath%>" />
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  14. <title>Map</title>
  15. <link href="css/bootstrap.css" rel="stylesheet">
  16. <script src="js/jquery-3.2.1.js"></script>
  17. <script src="js/bootstrap.js"></script>
  18. </head>
  19. <body>
  20. <form class="form-horizontal" action="<%=request.getContextPath()%>/Action/returnMapAction" role="form" method="post">
  21. <div class="form-group">
  22. <label for="firstname" class="col-sm-1 control-label">id</label>
  23. <div class="col-sm-3">
  24. <input type="text" class="form-control" name="map[user1].id"
  25. placeholder="请输入id">
  26. </div>
  27. </div>
  28. <div class="form-group">
  29. <label for="lastname" class="col-sm-1 control-label">名字</label>
  30. <div class="col-sm-3">
  31. <input type="text" class="form-control" name="map[user1].name"
  32. placeholder="请输名字">
  33. </div>
  34. </div>
  35. <div class="form-group">
  36. <label for="lastname" class="col-sm-1 control-label">地址</label>
  37. <div class="col-sm-3">
  38. <input type="text" class="form-control" name="map[user1].addrs"
  39. placeholder="请输地址">
  40. </div>
  41. </div>
  42. <div class="form-group">
  43. <div class="col-sm-offset-1 col-sm-3">
  44. <button type="submit" class="btn btn-default">提交</button>
  45. <button type="reset" class="btn btn-default">重置</button>
  46. </div>
  47. </div>
  48. </form>
  49. </body>
  50. </html>

表单向服务器提交数据,提交后结果如下:

2,@RequestParam参数绑定

复杂一些的数据需使用@RequestParam完成参数映射,虽然自动参数映射很方便,但有些细节是不能处理的,例如参数是否为必须参数名称没有办法指定参数的默认值。如果使用@RequestParam可以实现请求参数绑定,Spring MVC会自动查找请求中的参数转类型并将与参数进行绑定。

2.1,基本数据类型参数绑定

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: requestParamAction
  7. * @描述: RequestParam注解参数绑定
  8. * @param model
  9. * @param text
  10. * @return
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/requestParamAction")
  14. public String requestParamAction(Model model, @RequestParam(required = false, defaultValue = "默认的文本") String text){
  15. model.addAttribute("text", text);
  16. return "return";
  17. }
  18. }

@RequestParam共有4个注解属性:

required属性

表示是否为必须,默认值为true,如果请求中没有指定的参数会报异常。

defaultValue属性

用于设置参数的默认值,如果不指定值则使用默认值,只能是String类型的。

name与value属性

两个互为别名关系用于指定参数名称。

运行结果:

2.2,List数据类型参数绑定

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: requestParamListAction
  7. * @描述: RequestParam注解List类型参数绑定
  8. * @param model
  9. * @param text
  10. * @return
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/requestParamListAction")
  14. public String requestParamListAction(Model model, @RequestParam("text") List<String> text){
  15. model.addAttribute("text", text);
  16. return "return";
  17. }
  18. }

运行结果:

2.3,自定义数据类型参数绑定与Ajax

如果需要直接绑定更加复杂的数据类型,则需要使用@RequestBody与@ResponseBody注解:

@RequestBody

将HTTP请求正文转换为适合的HttpMessageConverter对象。

@ResponseBody

将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。

@RequestBody默认接收的Content-Type是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数时不会自动的转换成JSON数据再解析成相应的集合,Spring默认的json协议解析由Jackson完成。要完成这个功能还需要修改pom.xml,添加jackson依赖,如下:

  1. <!-- jackson -->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core</groupId>
  4. <artifactId>jackson-core</artifactId>
  5. <version>2.5.2</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.fasterxml.jackson.core</groupId>
  9. <artifactId>jackson-databind</artifactId>
  10. <version>2.5.2</version>
  11. </dependency>

方法(Action)定义如下:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: requestJSONAction
  7. * @描述: 接收JSON格式的数据显示控制台
  8. * @param response
  9. * @param person
  10. * @throws IOException
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/requestJSONAction")
  14. //@RequestBody的作用是让Spring MVC在收到客户端请求时将选择合适的转换器将参数转换成相应的对象。
  15. public void requestJSONAction(HttpServletResponse response, @RequestBody List<Person> person) throws IOException{
  16. response.setCharacterEncoding("UTF-8");
  17. System.out.println(Arrays.deepToString(person.toArray()));
  18. response.getWriter().write("添加成功");
  19. }
  20. /**
  21. *
  22. * @方法名: requestJSON2Action
  23. * @描述: 接收JSON格式的数据返回页面
  24. * @param response
  25. * @param person
  26. * @return
  27. * @throws IOException
  28. * @创建人 Zender
  29. */
  30. @RequestMapping("/requestJSON2Action")
  31. @ResponseBody//该注解会使用jackson将该对象自动序列化成json字符
  32. public List<Person> requestJSON2Action(HttpServletResponse response, @RequestBody List<Person> person) throws IOException{
  33. return person;
  34. }
  35. }

页面如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"
  6. + request.getServerName() + ":" + request.getServerPort()
  7. + path + "/";
  8. %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <base href="<%=basePath%>" />
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  14. <title>Map</title>
  15. <link href="css/bootstrap.css" rel="stylesheet">
  16. <script src="js/jquery-3.2.1.js"></script>
  17. <script src="js/bootstrap.js"></script>
  18. </head>
  19. <body>
  20. <button class="btn btn-default" type="submit" onclick="addPersion();">提交</button>
  21. <button class="btn btn-default" type="submit" onclick="getPersion();">获取</button>
  22. <p id="msg"></p>
  23. <script type="text/javascript">
  24. function addPersion(){
  25. $.ajax({
  26. type : "POST",
  27. url : "Action/requestJSONAction",
  28. data : '[{"id" : 1, "name" : "Zender", "addrs" : "Shanghai"},' +
  29. '{"id" : 2, "name" : "Zender1", "addrs" : "Shanghai1"},' +
  30. '{"id" : 3, "name" : "Zender2", "addrs" : "Shanghai2"}]',
  31. contentType : "application/json;charset=UTF-8",
  32. dataType : "text",
  33. success : function(result) {
  34. $("#msg").html(result);
  35. }
  36. });
  37. }
  38. function getPersion(){
  39. $.ajax({
  40. type : "POST",
  41. url : "Action/requestJSON2Action",
  42. data : '[{"id" : 1, "name" : "Zender", "addrs" : "Shanghai"},' +
  43. '{"id" : 2, "name" : "Zender1", "addrs" : "Shanghai1"},' +
  44. '{"id" : 3, "name" : "Zender2", "addrs" : "Shanghai2"}]',
  45. contentType : "application/json;charset=UTF-8",
  46. dataType : "json",
  47. success : function(result) {
  48. var str = "";
  49. $.each(result, function(i, obj) {
  50. str += "id:" + obj.id + ",name:" + obj.name + ",addrs:"+ obj.addrs + "<br/>";
  51. });
  52. $("#msg").html(str);
  53. }
  54. });
  55. }
  56. </script>
  57. </body>
  58. </html>

点击提交按钮运行结果:

控制台:

点击获取按钮运行结果:

3,重定向与RedirectAttributes

在一个请求处理方法Action中如果返回结果为"return"字符则表示转发到视图return,有时候我们需要重定向,则可以在返回的结果前加上一个前缀"redirect:",可以重定向到一个指定的页面也可以是另一个方法(action),代码如下:

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. @RequestMapping("/redirectAction1")
  5. public String redirectAction1(Model model, Person person){
  6. model.addAttribute("person", person);
  7. System.out.println(person.toString());
  8. return "return";
  9. }
  10.  
  11. @RequestMapping("/redirectAction2")
  12. //RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的.
  13. public String redirectAction2(Model model, RedirectAttributes redirectAttributes){
  14. Person person = new Person(1, "Zender", "Shanghai");
  15. redirectAttributes.addFlashAttribute("person", person);
  16. return "redirect:redirectAction1";
  17. }
  18. }

RedirectAttributes:

RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的。

他有两种带参的方式:

第一种:

attr.addAttribute("param", value);

这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险。

第二种:

attr.addFlashAttribute("param", value);

这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉参数。

访问redirectAction2,首先创建了一个person对象,将该对象添加到了Flash属性中,在重定向到redirectAction1后取出person对象,显示到页面上。

4,@ModelAttribute注解

@ModelAttribute可以应用在方法参数上或方法上。

注解在参数上

会将注解的参数对象添加到Model中。

注解在方法上

会将该方法(Action)变成一个非请求处理的方法,在其它方法(Action)被调用时会首先调用该方法。

4.1,注解在参数上

注解在参数上会将注解的参数对象添加到Model中。

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: modelAttributeAction
  7. * @描述: 自动数据绑定
  8. * @param model
  9. * @param person
  10. * @return 返回视图名称
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/modelAttributeAction")
  14. public String modelAttributeAction(Model model, @ModelAttribute(name = "person", binding = true) Person person){
  15. System.out.println("是否在Model里:" + model.containsAttribute("person"));
  16. model.addAttribute("person", person);
  17. return "return";
  18. }
  19. }

运行结果:

4.2,注解在方法上

注解在方法上会将该方法(Action)变成一个非请求处理的方法,在其它方法(Action)被调用时会首先调用该方法。

  1. @Controller
  2. @RequestMapping("/Action")
  3. public class ActionController {
  4. /**
  5. *
  6. * @方法名: modelAttributeAction
  7. * @描述: 自动数据绑定
  8. * @param model
  9. * @param person
  10. * @return 返回视图名称
  11. * @创建人 Zender
  12. */
  13. @RequestMapping("/modelAttributeAction")
  14. public String modelAttributeAction(Model model, @ModelAttribute(name = "person", binding = true) Person person){
  15. System.out.println("是否在Model里:" + model.containsAttribute("person"));
  16. model.addAttribute("person", person);
  17. Map<String, Object> map = model.asMap();
  18. for (String key : map.keySet()) {
  19. System.out.println(map.get(key));
  20. }
  21. return "return";
  22. }
  23.  
  24. @ModelAttribute
  25. public String initAction(){
  26. System.out.println("initAction方法被调用!");
  27. String text = "测试数据";
  28. return text;
  29. }
  30.  
  31. @ModelAttribute
  32. public void initAction2(){
  33. System.out.println("initAction2方法被调用!");
  34. }
  35. }

运行结果:

非请求处理方法可以返回void,也可以返回一个任意对象,该对象会被自动添加到每一个要被访问的Action的Model中。

2,Spring MVC 学习总结(二)- 方法(Action)参数映射的更多相关文章

  1. spring MVC学习之二

    什么是Spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MV ...

  2. spring mvc学习笔记二:@RequestMapping

    @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. @RequestMapp ...

  3. MVC学习系列2--向Action方法传递参数

    首先,新建一个web项目,新建一个Home控制器,默认的代码如下: public class HomeController : Controller { // GET: Home public Act ...

  4. Spring MVC 学习 之 - 配置简单demo

    1.环境参数: Maven:3.1.1 JDK  :1.6 2.项目文件结构图: 3.各文件配置: 3.1. pom.xml <project xmlns="http://maven. ...

  5. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含多个Action(动作. ...

  6. Spring MVC 学习笔记(二)

    6. 视图和视图解析器  ❤  Spring MVC如何解析视图                                  • 请求处理方法执行完成后,最终返回一个ModelAndView对象 ...

  7. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...

  8. Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客

    Spring MVC 学习总结(一)--MVC概要与环境配置   目录 一.MVC概要 二.Spring MVC介绍 三.第一个Spring MVC 项目:Hello World 3.1.通过Mave ...

  9. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  10. Spring MVC 学习)——控制器与@RequestMapping详解

    Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解 一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求 ...

随机推荐

  1. Android O编译前修改文件和目录权限

    当需要修改某文件或路径权限时,我们可以在init.rc开机启动某节点添加chmod命令进行修改.但是对于system分区,由于是ro权限,在init.rc使用chmod修改权限无效.需要在文件编译时, ...

  2. Duplicate entry '4799' for key 'PRIMARY'

    增加1条SQL记录报错: Operation failed: There was an error while applying the SQL script to the database. Exe ...

  3. idea 快捷键汇总

    1.IDEA常用快捷键 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+In ...

  4. c#Cache的用法

    public class Cache { /// <summary> /// 获取数据缓存 /// </summary> /// <param name="ca ...

  5. [Python3] 023 面向对象 第三弹

    目录 7. 类相关函数 8. 类的成员描述符(属性) 9. 类的内置属性 10. 类的常用魔术方法 10.1 操作类 10.2 描述符 10.3 属性操作 10.4 运算分类相关魔术方法 接上一篇 [ ...

  6. [CF643E]Bear and Destroying Subtrees(期望,忽略误差)

    Description: ​ 给你一棵初始只有根为1的树 ​ 两种操作 ​ 1 x 表示加入一个新点以 x为父亲 ​ 2 x 表示以 x 为根的子树期望最深深度 ​ 每条边都有 \(\frac{1}{ ...

  7. Python入门习题10.河内塔(汉诺塔)问题

    例10 共n个圆盘,a,b,c三根柱子 #汉诺塔问题.py def Hanoi(n): #定义n阶汉诺塔问题移动次数函数 if n == 1: return 1 else: return 2*Hano ...

  8. Link-Cut-Tree学习(LCT)

    Link-Cut-Tree学习(LCT) 真不敢想象我居然学会LCT了,但是我仍然不想写一篇博客来梳理 我怕一梳理自己又不懂了 但是作为一名朴实沉毅的cjoier,我决定小小的梳理一下,并不打算很精致 ...

  9. Java解析Groovy和Shell的代码

    一.使用场景 在整个系统中,通用型的代码基本没什么变化,需要变动的仅仅是业务相关的代码.那么我们就会把一些业务代码简单编码一下放在数据库中.通过数据库的配置,可以直接从数据库中查找出来编码处理一下,来 ...

  10. windows使用ubuntu启动linux服务

    有些服务只能在linux中策马奔腾,但是公司配置windows电脑,因此在windows中安装ubuntu服务,再在启动的ubuntu中启动linux服务 系统:win10(其他系统没试过) 安装步骤 ...