spring mvc 小结-51cto学院Spring MVC

来源:互联网 发布:分期乐网络繁忙 编辑:程序博客网 时间:2024/04/29 14:17

一.Spring MVC 基础


Spring mvc 框架 是一个MVC框架,通过实现MVC很好地将数据、业务、展现进行分离,其底层仍然是servlet
要在web.xml 中配置servlet

Spring MVC 的设计围绕DispatcherServlet 展开的,
 由DispatcherServlet负责将请求派发到 特定的handler->controller->modelandview-> vierresolve->view

 一定要创建web.xml 文件
 
 spring mvc 框架搭建步骤:
 1.创建工程,拷贝spring mvc相关的jar包到lib
 2.配置 web.xml,配置前端控制器,DispacherServlet
 <!-- 配置 DispacherServlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
 3.在web-inf 下创建一个spring mvc 的配置文件,文件的命名规则为:[servletname]-servlet.xml
  springmvc-servlet.xml
  
 4.配置handlerMapping:根据bean name 来查找对应的Controller(这步可以省略)
  <bean class = "org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping" ></bean>

5.创建jsp页面:需要发出请求的页面

6.创建HelloController,继承org.springframework.web.servlet.mvc.AbstractController,
重写handleRequestInternal。
//返回数据和页面
ModelAndView  mav = new ModelAndView("index");  //返回的页面
mav.addObject("helloworld","hello: " + hello);


7.配置视图解析器
<!-- 配置视图解析器 :拼接路径-->
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
 <!-- 前缀 -->
 <property name="prefix" value = "/view/" ></property>
 <!-- 后缀 -->
 <property name="suffix" value = ".jsp"></property>
</bean>


二.HandlerMapping 的三种方式


<!-- 
1.根据bean name 找到对应的控制器
<bean class = "org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping" ></bean>
<bean name = "/user.do" class = "com.springmvc.controller.UserController"></bean>
 -->
 
<!--2.根据 简单 url来查找 Controller 
<bean class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key = "/userInfo.do">UserController</prop>
</props>
</property>
</bean>


<bean id = "UserController" class = "com.springmvc.controller.UserController"></bean>
-->


<!-- 3.根据控制类的类名访问Controller,访问时类名首字母需要小写 -->
<bean class = "org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
<bean  class = "com.springmvc.controller.UserController"></bean>


<!-- 配置视图解析器 :拼接路径-->
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
 <!-- 前缀 -->
 <property name="prefix" value = "/" ></property>
 <!-- 后缀 -->
 <property name="suffix" value = ".jsp"></property>
</bean>

jsp 页面:
<a href = "user.do">根据bean name 访问controller</a><br/>
   <a href = "userInfo.do">根据url 访问controller</a><br/>
   <a href = "userController.do">根据 Controller 类名访问controller</a><br/>


三.参数传递

请求参数传递:
1.通过设置HTtpServletRequest request,HttpSession,HttpServletResponse 来获取数据
<form action = "user/add.do" method = "get">
  账号:<input type = "text" name = "userName"/><br/>
  密码:<input type = "password"  name = "userPwd"/><br/>
  <input type = "submit" value = "提交"/>
   </form>


/**
* 传递参数的方法一
* @param request
* @return

@RequestMapping(value = "/add.do",method = RequestMethod.GET)
//HttpSession
public String add(HttpServletRequest request){
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");

System.out.println("用户信息 :用户名" + userName + ", 密码:" +userPwd);
return "userinfo/user_add";
}


2.直接设置参数,例如:
public String add(@RequestParam(value = "userName",defaultValue = "sa")String name,Integer userPwd)


<form action = "user/add.do" method = "get">
  账号:<input type = "text" name = "userName"/><br/>
  密码:<input type = "password"  name = "userPwd"/><br/>
  <input type = "submit" value = "提交"/>
   </form>


/**
* 传递参数的方法二
* @return

@RequestMapping(value = "/add.do",method = RequestMethod.GET)
//数据多时,可以通过传递对象的方式来传递参数
public String add(String userName,String userPwd){
System.out.println("用户信息 :用户名" + userName + ", 密码:" +userPwd);
return "userinfo/user_add";
}
*/

/**
* 传递参数的方法二
* @RequestParam 给参数取别名
* @return

@RequestMapping(value = "/add.do",method = RequestMethod.GET)
//数据多时,可以通过传递对象的方式来传递参数
//Integer userPwd 会有类型转换的操作
public String add(@RequestParam(value = "userName",defaultValue = "sa")String name,Integer userPwd){
System.out.println("用户信息 :用户名" + name + ", 密码:" +userPwd);
return "userinfo/user_add";
}
*/

3.通过对象
表单的name属性的值必须和类的属性名称一直


/**
* 传递参数的方法三
* @param user
* @return
*/
@RequestMapping(value = "/add3.do",method = RequestMethod.GET)
public String add(UserInfo user){
System.out.println(user.toString());
return "userinfo/user_add";
}





package com.hl.po;


import java.util.Arrays;


public class UserInfo {
private Integer userId;
private String userName;
private String userSex;
private String [] userXq;

public String[] getUserXq() {
return userXq;
}
public void setUserXq(String[] userXq) {
this.userXq = userXq;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
@Override
public String toString() {
return "UserInfo [userId=" + userId + ", userName=" + userName
+ ", userSex=" + userSex + ", userXq="
+ Arrays.toString(userXq) + "]";
}




}




    <!-- 获取参数的方法3 -->
    <form action = "user/add3.do" method = "get">
    <!-- 下面这种写法,控制台输出的结果为:UserInfo [userId=null, userName=null, userSex=null]
     -->
    <!--
     编号:<input type = "text" name = "user.userId"/><br/>
  姓名:<input type = "password"  name = "user.userName"/><br/>
  性别:<input type = "text"  name = "user.userSex"/><br/>
  <input type = "submit" value = "提交"/>
      -->
      
      <!-- 下面这种写法获取的结果为:
      UserInfo [userId=1, userName=2, userSex=3]
               自动根据名称来查找UserInfo类的set方法进行匹配(反射)
               表单的name属性的值必须和类的属性名称一直
      下面这种写法是正确的写法
       -->
      
  编号:<input type = "text" name = "userId"/><br/>
  姓名:<input type = "password"  name = "userName"/><br/>
  性别:<input type = "text"  name = "userSex"/><br/>
  兴趣爱好:
  <input type = "checkbox" name = "userXq"  value = "LOL">LOL
  <input type = "checkbox" name = "userXq"  value = "yingxiong">yingxiong
  <input type = "checkbox" name = "userXq"  value = "cs">cs
  <input type = "submit" value = "提交"/>
   
   </form>




4.类型转换
  <!-- 获取时间参数 -->
  <form action = "user/add4.do" method = "get">
  时间:<input type = "text"  name = "userTime"/><br/>
  <input type = "submit" value = "提交"/>
   </form>


/**
* 获取时间参数
* @param user
* @return
*/
@RequestMapping(value = "/add4.do",method = RequestMethod.GET)
public String add(Date userTime){
System.out.println(userTime);
//输出示例:Thu Feb 03 09:11:00 CST 1994
return "userinfo/user_add";
}

/**
* 时间属性编辑器(自定义的类型转换)
*/
@InitBinder
public void initBinder(ServletRequestDataBinder bin){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:SS");
CustomDateEditor cust = new CustomDateEditor(sdf,true);
bin.registerCustomEditor(Date.class, cust);
}
  

四.返回页面








0 0
原创粉丝点击