Spring Web MVC注解应用及一些常用方法技巧
2016-12-26 11:54
609 查看
Spring Web MVC注解应用
a.RequestMappingHanlderMapping组件@RequestMapping(“/login..do”)
该标签用在Controller业务方法前
b.Controller编写和配置
取消了实现Controller接口及方法的约定
可以允许我们按需要灵活定义业务方法
public ModelAndView或者String 方法名(根据需要定义 request,response,session){}
(Controller需要扫描到Spring容器,必须使用@Controller)
还是写例子 hello.jsp
处理流程是一样的
Spring配置文件:
<!-- 等价于handlermapping和handleradapter两个bean。其实还有其他的 --> <!-- 开启扫描controller --> <context:component-scan base-package="Controller"></context:component-scan> <!-- 配置viewResolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>
web.xml
<servlet> <servlet-name>springwebmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指明配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!-- <load-on-startup>1</load-on-startup> --> </servlet> <servlet-mapping> <servlet-name>springwebmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
Controller:
package Controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller//扫描到Spring容器 public class toLogonController { @RequestMapping("logon.do") public ModelAndView execute(){ ModelAndView mav = new ModelAndView("hello"); return mav; } }
hello.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Spring MVC example</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h1>Spring Web MVC 注解版</h1> </body> </html>
再写下登陆
//进入登陆页面/tologin.do
DispatcherServlet
Handlermapping
LoginController
ViewResolver
login.jsp
login.do
DispatcherServlet
Handlermapping
LoginController
ViewResolver
正确jsp 错误jsp
主要是Controller
可以把多个控制写在一个里面不同的就是请求路径
package Controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller//扫描到Spring容器 public class toLogonController { @RequestMapping("tologin.do") public ModelAndView execute(){ ModelAndView mav = new ModelAndView("login"); return mav; } @RequestMapping("login.do") public String checkLogin(HttpServletRequest request){ String username=request.getParameter("username"); String password=request.getParameter("password"); if(username.equals("root")&&password.equals("1234")){ return "hello"; }else return "login"; } }
1.Controller如何接收请求参数
a.利用HttpServletRequestb.利用业务方法参数
参数名与请求参数key保持一致
请求:
login.do?username=xxx
Controller中:
public String f1(String username){}
或者利用@RequetParam(“key”)
public checkLogin1( @RequetParam(“key”) String username ){ }
然后这个username就有值了。
注意:这个@RequetParam(“key”)是在方法参数中写在参数前面的
c.利用实体对象参数
//使用实体对象user接收请求参数 public String checkLogin2(User user){ //利用 user来接收参数并获取。 } 然后创建一个entity包写入类 User public class User implements Serializable(){ //最好写上接口 Serializable 方便以后序列化 private String username; private String password; 加上set get方法 }
少量参数使用b;利用方法参数名保持一致。大量参数使用c;如果客户端表单数据没有格式检查,遇到非字符串使用a;
2.Controller如何向响应jsp传值
a.利用HttpServletRequest(setAttribute方法)b.利用ModelAndView 返回一个ModelAndView对象利用
mav.getModel().put()方法其实这个Model是个map
c.利用ModelMap方法参数
@RequestMapping(“login3.do”) public String checkLogin3( String username String password ModelMap model){ //传给jsp值 //增加一个参数 ModelMap model.put(“username”,username); //在jsp中用el表达式获取 ${username} }
d.使用@ModelAttribute(“key”)
一个是get方法前面,一个方法参数前面
public String checkLogin4(@ModelAttribute(“user”)String username ){}
这么写就直接会帮你传过去。获取就是${user}
但只能把参数值传过去。
或者
@ModelAttribute(“user”) public String getName(){ return “tom” } 等价于 model.put(“user”,getName()); //${user}
主要用a和c
3.Controller如何使用session
public String checkLogin(HttpSession session){ session.setAttribute(key,value); }
然后在jsp中获取session内容还是用el表达式
${sessionScope.username}
案例:列表显示功能
/list.doDispatcherServlet
HandlerMapping
ListController(List,传递到list.jsp)
ViewResolver
/WEB-INF/list.jsp
Controller:
package Controller; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import entity.User; @Controller public class ListController { @RequestMapping("list.do") public String listController(HttpServletRequest request){ List<User> list =new ArrayList<User>(); for(int i=0;i<5;i++){ User user = new User(); user.setUsername("admin"+i); user.setPassword("password"+i); list.add(user); } request.setAttribute("list", list); return "list"; } }
User:
package entity; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
list.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>list</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <%@page import="entity.*" %> <body> <h1>list</h1> <table> <tr> <td>id</td> <td>username</td> <td>password</td> </tr> <% List<User> list = ( List<User>)request.getAttribute("list"); int i=0; for(User user:list){ i++; String username=user.getUsername(); String password=user.getPassword(); %> <tr> <td><%=i %></td> <td><%=username %></td> <td><%=password %></td> </tr> <% } %> </table> </body> </html>
使用jstl标签:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>list</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <%@page import="entity.*" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <body> <h1>list</h1> <table> <tr> <td>id</td> <td>username</td> <td>password</td> </tr> <c:forEach items="${list}" var="user"> <tr> <td>${user.username}</td> <td>${user.password}</td> </tr> </c:forEach> </table> </body> </html>
相关文章推荐
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解
- SPRINGMYBATIS01 Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用
- Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解
- Spring Web MVC简介 、基于XML配置的MVC应用 、基于注解配置的MVC应用
- 转载:注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解
- Spring Roo ioc 和 webmvc中的注解
- web开发中常用到一些JavaScript方法
- Spring基于注解的缓存配置--web应用实例
- Spring Roo ioc 和 webmvc中的注解
- Spring3 MVC 注解(一)---注解基本配置及@controller和 @RequestMapping 常用解释
- asp.net下GDI+的一些常用应用(水印,文字,圆角处理)技巧
- Spring在web应用中获得Bean的方法
- java技巧——常用的一些好方法
- 【web开发】基于注解spring的多方法请求的一种controller实现
- 使用WebContainer中的Spring 常用方法
- 初学ASP.NET开发web应用时遇到的一些常见问题和解决方法
- WEB前端开发中一些常用技巧总结