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>&nbsp&nbsp&nbsp&nbsp" + 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>&nbsp&nbsp&nbsp&nbsp" + 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>&nbsp&nbsp&nbsp&nbsp" + 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>&nbsp&nbsp&nbsp&nbsp" + 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&amp;characterEncoding=utf-8</value>

              </property>

              <property name="username">

                     <value>root</value>

              </property>

              <property name="password">

                     <value></value>

              </property>

       </bean>

posted @ 2016-12-20 15:13  jhtchina  阅读(260)  评论(0)    收藏  举报