Spring向页面传值和接受页面传过来的参数详解

时间:2021-05-20

本文主要给大家介绍了关于Spring向页面传值和接受页面传过来的参数的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

一、从页面接收参数

spring MVC接收请求提交的参数值的几种方法:

1、使用HttpServletRequest获取。

@RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.getParameter("name") String pass = request.getParameter("pass") }

2、使用@RequestParam注解。

@RequestMapping("/login.do") public String login(HttpServletRequest request, String name, @RequestParam("pass")String password) // 表单属性是pass,用变量password接收 { syso(name); syso(password) }

3、使用自动机制封装成实体参数。

<form action="login.do"> 用户名:<input name="name"/> 密码:<input name="pass"/> <input type="submit" value="登陆"> </form> //封装的User类 public class User{ private String name; private String pass; } @RequestMapping("/login.do") public String login(User user) { syso(user.getName()); syso(user.getPass()); }

二、向页面传值

当Controller组件处理后,需要向响应JSP传值时,可以使用的方法:

1),使用HttpServletRequest 和 Session 然后setAttribute() ,就和Servlet中一样

Model数据会利用HttpServletRequest的Attribute传值到success.jsp中

@RequestMapping("/login.do") public ModelAndView login(String name,String pass){ User user = userService.login(name,pwd); Map<String,Object> data = new HashMap<String,Object>(); data.put("user",user); return new ModelAndView("success",data); }

2),使用ModelAndView对象

3),使用ModelMap对象

使用ModelMap参数对象示例:

ModelMap数据会利用HttpServletRequest的Attribute传值到success.jsp中

@RequestMapping("/login.do") public String login(String name,String pass ,ModelMap model){ User user = userService.login(name,pwd); model.addAttribute("user",user); model.put("name",name); return "success"; }

4),使用@ModelAttribute注解

使用@ModelAttribute示例

在Controller方法的参数部分或Bean属性方法上使用@ModelAttribute数据会利用HttpServletRequest的Attribute传值到success.jsp中

@RequestMapping("/login.do") public String login(@ModelAttribute("user") User user){ //TODO return "success"; } @ModelAttribute("name") public String getName(){ return name; }

5)Session存储:可以利用HttpServletReequest的getSession()方法

@RequestMapping("/login.do") public String login(String name,String pwd ModelMap model,HttpServletRequest request){ User user = serService.login(name,pwd); HttpSession session = request.getSession(); session.setAttribute("user",user); model.addAttribute("user",user); return "success"; }

6)自定义Map

@ResponseBody @RequestMapping(value = "/updatestatus", method = RequestMethod.POST) public Map<String, Object> updateStatus(HttpServletRequest request) { Map<String, Object> result = new HashMap<String, Object>(); String id = request.getParameter("id"); SystemAdministrator sysadmin=systemAdminBiz.get(Integer.valueOf(id)); sysadmin.setStatus(1); boolean flag = systemAdminBiz.update(sysadmin); result.put("status", flag); return result; }@RequestMapping(value = "/list", method = {RequestMethod.POST,RequestMethod.GET}) public String queryAdministrator(HttpServletRequest request,ModelMap model) { Integer roleId = request.getParameter("roleListById") == null ? 0 : Integer.parseInt(request.getParameter("roleListById")); Map<String, Object> properties = new HashMap<String, Object>(); if(roleId.intValue() > 0) { properties.put("role:=", roleId); model.put("roleId", roleId); } List<SystemAdministrator> administrator = systemAdminBiz.find(properties); List<SystemRole> systemRole = systemRoleBiz.getAll(); model.put("administratorList", administrator); model.put("roleList", systemRole); return "sys_admin_list"; }

7)Spring MVC 默认采用的是转发来定位视图,如果要使用重定向,可以如下操作

1,使用RedirectView

2,使用redirect:前缀

public ModelAndView login(){ RedirectView view = new RedirectView("regirst.do"); return new ModelAndView(view); }

或者用如下方法,工作中常用的方法:

public String login(){ //TODO return "redirect:regirst.do"; }

三、实例讲解:

步骤一:创建新Web项目,导入Spring MVC包和业务层UserService

1. 创建Web项目导入相关的jar包:

2. 导入前述业务层UserService类以及依赖的类,等。

User类代码如下:

package com.souvc.entity;import java.io.Serializable;public class User implements Serializable { private static final long serialVersionUID = -603439325380668432L; private int id; private String name; private String pwd; private String phone; public User() { } public User(int id, String name, String pwd, String phone) { this.id = id; this.name = name; this.pwd = pwd; this.phone = phone; } public User(String name, String pwd, String phone) { super(); this.name = name; this.pwd = pwd; this.phone = phone; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public int hashCode() { return id; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (obj instanceof User) { User o = (User) obj; return this.id == o.id; } return true; } @Override public String toString() { return id + "," + name + "," + pwd + "," + phone; }}

UserDao接口代码如下:

package com.souvc.dao;import com.souvc.entity.User;/** * 用户数据访问对象接口 */public interface UserDao { /** 根据唯一用户名查询系统用户, 如果没有找到用户信息返回null */ public User findByName(String name); // public User add(String name, String pwd, String phone); // public User find(int id); // public User delete(int id); // public void update(User user);}

UserService类代码如下:

package com.souvc.service;import java.io.Serializable;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.souvc.dao.UserDao;import com.souvc.entity.User;/** 业务层 注解 */@Service// 默认的Bean ID是 userServicepublic class UserService implements Serializable { private static final long serialVersionUID = 7360372166489952236L; private UserDao userDao; // @Resource //自动匹配userDao对象并注入 @Resource(name = "userDao") public void setUserDao(UserDao userDao) { this.userDao = userDao;// } public UserDao getUserDao() { return userDao; } /** 登录系统功能 */ public User login(String name, String pwd) throws NameOrPwdException, NullParamException { if (name == null || name.equals("") || pwd == null || pwd.equals("")) { throw new NullParamException("登录参数不能为空!"); } User user = userDao.findByName(name); if (user != null && pwd.equals(user.getPwd())) { return user; } throw new NameOrPwdException("用户名或者密码错误"); }}

NameOrPwdException类代码如下:

package com.souvc.service;/** 用户名或者密码错误 */public class NameOrPwdException extends Exception { public NameOrPwdException() { } public NameOrPwdException(String message) { super(message); } public NameOrPwdException(Throwable cause) { super(cause); } public NameOrPwdException(String message, Throwable cause) { super(message, cause); }}

NullParamException类代码如下:

package com.souvc.service;/** 参数为空 */public class NullParamException extends Exception { public NullParamException() { } public NullParamException(String message) { super(message); } public NullParamException(Throwable cause) { super(cause); } public NullParamException(String message, Throwable cause) { super(message, cause); }}

JdbcDataSource类代码如下:

package com.souvc.dao;import java.io.Serializable;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;/** 组件注解 */@Componentpublic class JdbcDataSource implements Serializable { private static final long serialVersionUID = -8925981939329398101L; private String driver; @Value("#{jdbcProps.url}") private String url; @Value("#{jdbcProps.user}") private String user; @Value("#{jdbcProps.pwd}") private String pwd; public String getDriver() { return driver; } /** 必须使用Bean属性输入, 否则不能进行JDBC Driver注册 */ @Value("#{jdbcProps.driver}") public void setDriver(String driver) { try { // 注册数据库驱动 Class.forName(driver); this.driver = driver; } catch (Exception e) { throw new RuntimeException(e); } } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public Connection getConnection() throws SQLException { Connection conn = DriverManager.getConnection(url, user, pwd); return conn; } public void close(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }}

MysqlUserDao类代码如下:

package com.souvc.dao;import java.io.Serializable;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Repository;import com.souvc.entity.User;/** 持久层 注解 */@Repository("userDao")// 指定特定的Bean ID 方便setUserDao注入public class MysqlUserDao implements UserDao, Serializable { private static final long serialVersionUID = 7385842613248394287L; private JdbcDataSource dataSource; public MysqlUserDao() { } /** 创建 MysqlUserDAO 对象必须依赖于JDBCDataSource实例 */ public MysqlUserDao(JdbcDataSource dataSource) { this.dataSource = dataSource; } @Autowired // 按照类型自动装配 public void setDataSource(@Qualifier("jdbcDataSource") JdbcDataSource dataSource) { this.dataSource = dataSource; } public JdbcDataSource getDataSource() { return dataSource; } /** 根据唯一用户名查询系统用户, 如果没有找到用户信息返回null */ public User findByName(String name) { System.out.println("利用JDBC技术查找User信息"); String sql = "select id, name, pwd, phone from users where name=?"; Connection conn = null; try { conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, name); ResultSet rs = ps.executeQuery(); User user = null; while (rs.next()) { user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setPwd(rs.getString("pwd")); user.setPhone(rs.getString("phone")); } rs.close(); ps.close(); return user; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { dataSource.close(conn); } }}

db.properties文件内容如下:

# config for Mysqldriver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/souvcuser=rootpwd=123456

spring-mvc.xml文件代码如下:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://.souvc.service.UserService;@Controller//@SessionAttributes("user")@RequestMapping("/login")public class LoginController { @Resource // 请求Spring注入资源 userService private UserService userService; @RequestMapping("/login.form") public String loginForm() { // 可以向表单界面传递一些参数 return "login-form"; } @RequestMapping("/login-action1.form") // Spring MVC 自动参数注入HttpServletRequest public String checkLogin1(HttpServletRequest req) { System.out.println("---方法一---"); // 优点直接简洁,缺点需要自己处理数据类型转换, 不支持文件上传功能 String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); System.out.println(name); System.out.println(pwd); try { User user = userService.login(name, pwd); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return "success"; } catch (NameOrPwdException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "login-form"; } catch (NullParamException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "redirect:login.form"; } catch (RuntimeException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "error"; } } @RequestMapping("/login-action2.form") public String checkLogin2(String name, @RequestParam("pwd") String password, // 映射表单属性不同的参数 HttpServletRequest req) { System.out.println("---方法二---"); // 优点, 自动转换数据类型, 缺点可能出现数据类型转换异常 System.out.println(name); System.out.println(password); try { User user = userService.login(name, password); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return "success"; } catch (NameOrPwdException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "login-form"; } catch (NullParamException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "login-form"; } catch (RuntimeException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "error"; } } @RequestMapping("/login-action3.form") public String checkLogin3(User user, HttpServletRequest req) { System.out.println("---方法三---"); // 自动填充到bean对象 System.out.println(user); try { user = userService.login(user.getName(), user.getPwd()); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return "success"; } catch (NameOrPwdException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "login-form"; } catch (NullParamException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "login-form"; } catch (RuntimeException e) { e.printStackTrace(); req.setAttribute("message", e.getMessage()); return "error"; } } @RequestMapping("/login-action4.form") public ModelAndView checkLogin4(String name, String pwd, HttpServletRequest req) { System.out.println("---方法四---"); Map<String, Object> data = new HashMap<String, Object>(); try { User user = userService.login(name, pwd); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return new ModelAndView("success", data); } catch (NameOrPwdException e) { e.printStackTrace(); data.put("message", e.getMessage()); return new ModelAndView("login-form", data); } catch (NullParamException e) { e.printStackTrace(); data.put("message", e.getMessage()); return new ModelAndView("login-form", data); } catch (RuntimeException e) { e.printStackTrace(); data.put("message", e.getMessage()); return new ModelAndView("error", data); } } @RequestMapping("/login-action5.form") public String checkLogin5(String name, String pwd, ModelMap model, HttpServletRequest req) { System.out.println("---方法五---"); try { User user = userService.login(name, pwd); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return "success"; } catch (NameOrPwdException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "login-form"; } catch (NullParamException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "login-form"; } catch (RuntimeException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "error"; } } @RequestMapping("/login-action6.form") public String checkLogin6( @ModelAttribute("name") String name, @ModelAttribute("password") String pwd, ModelMap model, HttpServletRequest req){ System.out.println("---方法六---"); try { User user = userService.login(name, pwd); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return "success"; } catch (NameOrPwdException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "login-form"; } catch (NullParamException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "login-form"; } catch (RuntimeException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "error"; } } @RequestMapping("/login-action7.form") public String checkLogin7(ModelMap model, HttpServletRequest req) { System.out.println("---方法七---"); String name1=req.getParameter("name"); String pwd1=req.getParameter("pwd"); try { User user = userService.login(name1, pwd1); // 登录成功将登录用户信息保存到当前会话中 req.getSession().setAttribute("user", user); return "success"; } catch (NameOrPwdException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "redirect:login"; } catch (NullParamException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "redirect:login"; } catch (RuntimeException e) { e.printStackTrace(); model.addAttribute("message", e.getMessage()); return "error"; } } private String[] msg = { "再来一次", "下次就对了", "没关系还有机会" }; @ModelAttribute("next") public String getNext() { Random r = new Random(); return msg[r.nextInt(msg.length)]; }}

5.测试login-action1.form登录流程

通过网址“http://localhost:8080/SpringValues/login/login.form”请求Tomcat服务器:

访问请求的信息打印在控制台:

---方法一---Tom123利用JDBC技术查找User信息---方法二---Tom123利用JDBC技术查找User信息---方法三---0,Tom,123,null利用JDBC技术查找User信息---方法四---利用JDBC技术查找User信息---方法五---利用JDBC技术查找User信息

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章