Spring MVC学习
1 SpringMVC表单控制器验证用户登录
(1) .编写实体类User
public class User { private String userName; private String userPwd; /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the userPwd */ public String getUserPwd() { return userPwd; } /** * @param userPwd the userPwd to set */ public void setUserPwd(String userPwd) { this.userPwd = userPwd; } } |
(2) 编写控制类UserLoginController,并让该类继承SimpleFormController表单控制器类,并重写方法onSubmit()传入Object类型的对象,该对象就是封装了表单数据的实体对象。
public class UserLoginController extends SimpleFormController {
/* (non-Javadoc) * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(java.lang.Object) */ @Override protected ModelAndView onSubmit(Object command) throws Exception { User user = (User)command; String userName = user.getUserName(); String userPwd = user.getUserPwd(); Map map = new HashMap(); if("mr".equals(userName)&&"mrsoft".equals(userPwd)){ map.put("user", user); return new ModelAndView(getSuccessView(),"map",map); }else{ map.put("error", "用户名或密码不正确,请重新输入!"); return new ModelAndView(getFormView(),"map",map); } } }
|
(3)配置通过Spring配置文件applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 表单控制器 --> <bean name="/userLogin.html" class="com.jwy.controller.UserLoginController"> <property name="commandClass"> <value>com.jwy.controller.User</value> </property> <!-- 输入表单数据页面 --> <property name="formView"> <value>index.jsp</value> </property> <!-- 表单提交后转入页面 --> <property name="successView"> <value>login.jsp</value> </property> </bean> </beans>
|
配置一个表单控制器UserLoginController,然后将commandClass参数设置为com.jwy.controller.User类型,这样表单被提交Spring会自动将表单中的数据封装到User类型对象,并传递到onSubmit()方法中。
接下来还配置了formView与successView参数,这2个单数分别用来输入信息的表单页与表单处理完成之后的转向页面。
(4) 编写index.jsp页面
<form method="post"> <center>${map.error }</center> <table align="center"> <tr> <td height="23"><span class="STYLE3">输入用户名:</span></td> <td height="23"><input name="userName" type="text"></td> </tr> <tr> <td height="23"><span class="STYLE3">输入密码:</span></td> <td height="23"><input name="userPwd" type="password"></td> </tr> <tr> <td height="23" colspan="2" align="center"> <input type="submit" value="登录"> <input type="reset" value="重置"> </td> </tr> </table> </form> |
(5) 编写login.jsp,登录验证成功完成以后转向该页面。
系统登录成功<br><br><br>${map.user.userName},欢迎光临! |
2 多动作控制器
(1) 编写OperationController类,该类继承org.springframework.web.servlet.mvc.multiaction.MultiActionController类,用于实现多动作控制器的功能。
public class OperationController extends MultiActionController { public ModelAndView plus(HttpServletRequest request, HttpServletResponse response) { int num1 = Integer.valueOf(request.getParameter("num1")); int num2 = Integer.valueOf(request.getParameter("num2")); String exper = "运算结果:<br><br>    " + num1 + "+" + num2 + "=" + (num1 + num2); Map<String, String> map = new HashMap<String, String>(); map.put("num1", num1 + ""); map.put("num2", num2 + ""); map.put("exper", exper); return new ModelAndView("index.jsp", "map", map); }
public ModelAndView minus(HttpServletRequest request, HttpServletResponse response) { int num1 = Integer.valueOf(request.getParameter("num1")); int num2 = Integer.valueOf(request.getParameter("num2")); String exper = "运算结果:<br><br>    " + num1 + "-" + num2 + "=" + (num1 - num2); Map<String, String> map = new HashMap<String, String>(); map.put("num1", num1 + ""); map.put("num2", num2 + ""); map.put("exper", exper); return new ModelAndView("index.jsp", "map", map); }
public ModelAndView multiply(HttpServletRequest request, HttpServletResponse response) { int num1 = Integer.valueOf(request.getParameter("num1")); int num2 = Integer.valueOf(request.getParameter("num2")); String exper = "运算结果:<br><br>    " + num1 + "*" + num2 + "=" + (num1 * num2); Map<String, String> map = new HashMap<String, String>(); map.put("num1", num1 + ""); map.put("num2", num2 + ""); map.put("exper", exper); return new ModelAndView("index.jsp", "map", map); }
public ModelAndView division(HttpServletRequest request, HttpServletResponse response) { int num1 = Integer.valueOf(request.getParameter("num1")); int num2 = Integer.valueOf(request.getParameter("num2")); Map<String, String> map = new HashMap<String, String>(); map.put("num1", num1 + ""); map.put("num2", num2 + ""); if (num2 == 0) { map.put("exper", "零不能做除数!"); } else { String exper = "运算结果:<br><br>    " + num1 + "/" + num2 + "=" + (num1 / num2); map.put("exper", exper); } return new ModelAndView("index.jsp", "map", map); } } |
在该类中创建plus,minus,multiply,division方法,利用该方法实现加减乘除运算,并返回结果。
(2)在配置文件中配置前面编写的多动作控制器以及方法解析器。
<bean name="/operation.html" class="com.jwy.controller.OperationController"> <property name="methodNameResolver" ref="methodNameResolver" /> </bean> <!-- 配置方法解析器 --> <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName" value="method" /> </bean> |
(3) 编写index.jsp页面
<html> <head> <title>使用多动作控制器进行加、减、乘、除运算</title> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript"> function run(url){ if(check(document.f12.num1.value)&&check(document.f12.num2.value)){ document.f12.action=url; document.f12.submit(); } } function check(num){ var re = /^[0-9]*$/; if(re.test(num)){ return true; }else{ alert("你输入的"+num+"不是整数"); return false; } } </script> </head> <body> 输入操作数(整数): <form name="f12" action="" method="post"> 操作数1:<input type="text" name="num1" size="6" value="${map.num1 }"> 操作数2:<input type="text" name="num2" size="6" value="${map.num2 }"><br><br> <input type="button" value="加法" onclick="run('operation.html?method=plus')"> <input type="button" value="减法" onclick="run('operation.html?method=minus')"> <input type="button" value="乘法" onclick="run('operation.html?method=multiply')"> <input type="button" value="除法" onclick="run('operation.html?method=division')"> </form> ${map.exper} </body> </html> |
在上面的代码中,在URL请求中添加一个method参数来指定调用控制器中的那个方法。
2 Spring MVC通讯录
(1) 设计联系人信息表
DROP TABLE IF EXISTS `tb_books`; CREATE TABLE `tb_books` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `isbn` varchar(45) NOT NULL, `name` varchar(45) NOT NULL, `writer` varchar(45) NOT NULL, `price` varchar(45) NOT NULL, `publisher` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk; |
(2) 编写AddrBook实体类
public class AddrBook { private Integer id; //编号 private String name; //姓名 private String company; //公司 private String job; //职位 private String tel; //办公电话 private String mobile; //移动电话 private String mail; //电子邮件 private String fax; //传真 /** * @return the id */ public Integer getId() { return id; } /** * @param id the id to set */ public void setId(Integer id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the company */ public String getCompany() { return company; } /** * @param company the company to set */ public void setCompany(String company) { this.company = company; } /** * @return the job */ public String getJob() { return job; } /** * @param job the job to set */ public void setJob(String job) { this.job = job; } /** * @return the tel */ public String getTel() { return tel; } /** * @param tel the tel to set */ public void setTel(String tel) { this.tel = tel; } /** * @return the mobile */ public String getMobile() { return mobile; } /** * @param mobile the mobile to set */ public void setMobile(String mobile) { this.mobile = mobile; } /** * @return the mail */ public String getMail() { return mail; } /** * @param mail the mail to set */ public void setMail(String mail) { this.mail = mail; } /** * @return the fax */ public String getFax() { return fax; } /** * @param fax the fax to set */ public void setFax(String fax) { this.fax = fax; }
} |
(3) 编写IAddrBookDao接口,该接口声明对数据表操作的方法
public interface IAddrBookDao { public void insert(AddrBook addrBook); public void update(AddrBook addrBook); public void delete(Integer id); public List<Map> findByAll(); public AddrBook findById(Integer id); } |
(4) 编写IAddrBookDao接口,接口实现类是AddrBookDao,该类继承JdbcDaoSupport类,实现在IAddrBookDao接口中声明的方法。
public class AddrBookDao extends JdbcDaoSupport implements IAddrBookDao {
@Override public void insert(AddrBook addrBook) { // TODO Auto-generated method stub Object[] o = { addrBook.getName(), addrBook.getCompany(), addrBook.getJob(), addrBook.getTel(), addrBook.getMobile(), addrBook.getFax(), addrBook.getMail() }; getJdbcTemplate().update( "INSERT INTO " + "tb_addrBook(name,company,job,tel,mobile,fax,mail) " + "values (?,?,?,?,?,?,?)",o);
}
@Override public void update(AddrBook addrBook) { // TODO Auto-generated method stub Object[] o = { addrBook.getName(), addrBook.getCompany(), addrBook.getJob(), addrBook.getTel(), addrBook.getMobile(), addrBook.getFax(), addrBook.getMail(),addrBook.getId()}; getJdbcTemplate().update("UPDATE tb_addrBook SET name=?,company=?,job=?,tel=?,mobile=?,fax=?,mail=? WHERE id=?",o); }
@Override public void delete(Integer id) { // TODO Auto-generated method stub getJdbcTemplate().update("DELETE FROM tb_addrBook WHERE id="+id);
}
@Override public List<Map> findByAll() { // TODO Auto-generated method stub List list = getJdbcTemplate().queryForList("SELECT * FROM tb_addrBook"); return list; }
@Override public AddrBook findById(Integer id) { // TODO Auto-generated method stub AddrBook addrBook = new AddrBook(); List<Map<String, Object>> list = getJdbcTemplate().queryForList("SELECT * FROM tb_addrBook WHERE id="+id); for (int i = 0; i < list.size(); i++) { Map map = list.get(i); addrBook.setId(Integer.valueOf(map.get("id").toString())); addrBook.setName(map.get("name").toString()); addrBook.setCompany(map.get("company").toString()); addrBook.setJob(map.get("job").toString()); addrBook.setTel(map.get("tel").toString()); addrBook.setMobile(map.get("mobile").toString()); addrBook.setFax(map.get("fax").toString()); addrBook.setMail(map.get("mail").toString()); } return addrBook; }
} |
(5) 编写多动作控制类AddrBookController,该类继承自MultiActionController类,在该类中声明IAddrBookDao类型的私有成员变量。通过setter方法为其赋值。
public class AddrBookController extends MultiActionController { private IAddrBookDao addrBookDao; public void setAddrBookDao(IAddrBookDao addrBookDao) { this.addrBookDao = addrBookDao; } public ModelAndView insertAndUpdate(HttpServletRequest request,HttpServletResponse response){ AddrBook addrBook = new AddrBook(); addrBook.setName(request.getParameter("name")); addrBook.setCompany(request.getParameter("company")); addrBook.setJob(request.getParameter("job")); addrBook.setTel(request.getParameter("tel")); addrBook.setMobile(request.getParameter("mobile")); addrBook.setMail(request.getParameter("mail")); addrBook.setFax(request.getParameter("fax")); addrBook.setId(Integer.valueOf(request.getParameter("id"))); if(addrBook.getId()==0){ addrBookDao.insert(addrBook); }else{ addrBookDao.update(addrBook); } return findByAll(request, response); } public ModelAndView findByAll(HttpServletRequest request,HttpServletResponse response){ List<Map> list = addrBookDao.findByAll(); return new ModelAndView("show","list",list); } public ModelAndView update(HttpServletRequest request,HttpServletResponse response){ return null; } public ModelAndView delete(HttpServletRequest request,HttpServletResponse response){ Integer id = Integer.valueOf(request.getParameter("id")); addrBookDao.delete(id); return findByAll(request, response); } public ModelAndView findById(HttpServletRequest request,HttpServletResponse response){ Integer id = Integer.valueOf(request.getParameter("id")); AddrBook addrBook = addrBookDao.findById(id); return new ModelAndView("insertAndUpdate","addrBook",addrBook); } } |
例如在 findByAll方法中,ModelAndView格式是:ModelAndView(String viewName, String modelName, Object modelObject)
(6) 编写Spring配置文件,applicationContext.xml
首先配置id为id为dataSource 数据源bean
<!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/db_database17?useUnicode=true&characterEncoding=utf-8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value></value> </property> </bean> |