SpringMVC的注解式开发

2.1注解开发入门案例

web.xml为如果看了我上篇文章这个和上篇是一样的

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--springmvc的过滤器   防止中文乱码-->
  <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:mvc-servlet.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

修改mvc-servlet.xml为

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--1.配置注解扫描位置-->
    <context:component-scan base-package="com.ywj.web.controller"/>
    <!--2.配置处理器映射,通过注解查找-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
    <!--3.配置适配器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    <!--4.配置资源视图解析-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀		这里是活的,你根据你的实际情况改动-->
        <property name="prefix" value="/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

写注解控制器

package com.ywj.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/user")//区分模块推荐配置,不配置的话可以直接访问/list.do等
public class UserController {

    @RequestMapping("/list")
public String list(){
//返回的是页面名 因为配置了前缀和后缀会自动找到页面
    return "user";
}


    @RequestMapping("add")
    public String add(){
        return "user";
    }
    @RequestMapping(value ="/update")
    public String update(){
        return "user";
    }

/**    
    *@Description: 只接受post请求
    * @Param: []
    * @return: java.lang.String
    * @Author: ywj
    * @Date: 2019/1/14 0014
    */
    @RequestMapping(value ="/del",method = RequestMethod.POST)
    public String del(){
        return "user";
    }

/**    
    *@Description: 只接受get请求
    * @Param: []
    * @return: java.lang.String
    * @Author: ywj
    * @Date: 2019/1/14 0014
    */
    @RequestMapping(value ="/ss",method = RequestMethod.GET)
    public String ss(){
        return "user";
    }

}

2.2RequestMapping讲解

@Controller//相当于在spring中配置了一个<bean class='控制器的路径'

2.3接收请求参数

参数类型有:基本类型string int等等,Pojo类

Struts2参数:基于属性进行封装,在action中提供属性和set方法

SpringMVC参数封装:基于方法进行封装

  1. 第一种获取参数的方法参数名和页面的name要一致
/**    
    *@Description: 第一种传递参数的方式
 * date默认的格式是月/日/年
    * @Param: [username, userpassword, usersex, userage, userbirthday, userhobby]
    * @return: java.lang.String
    * @Author: ywj
    * @Date: 2019/1/14 0014
    */
    @RequestMapping("add")
    public String add(String username, String userpassword, String usersex, int userage, Date userbirthday , String[] userhobby){
        System.out.println(username);
        System.out.println(userpassword);
        System.out.println(usersex);
        System.out.println(userage);
        System.out.println(userbirthday);
        System.out.println(Arrays.toString(userhobby));

        return "user";
    }

前台代码:

<form action="${pageContext.request.contextPath}/user/add2.do" method="post">
   用户名:<input type="text" name="username">    <br>
   密  码:<input type="password" name="userpassword">     <br>
   性  别:<input type="radio" name="usersex" value="男">男<input type="radio" name="usersex" value="女"> 女    <br>
   年  龄:<input type="text" name="userage">                                                                             <br>
   生  日:<input type="text" name="userbirthday">                                                                            <br>
   爱  好:<input type="checkbox" name="userhobby" value="1">篮球                                                                
    <input type="checkbox" name="userhobby" value="2">足球
    <input type="checkbox" name="userhobby" value="3">跳舞
    <input type="checkbox" name="userhobby" value="4">瞎子<br>
    <input type="submit" value="提交">
    <input type="reset" value="重置">
</form>

2.第二种使用pojo    也就是实体类装入属性,数据自动封装到对象中

//第二种使用pojo    也就是实体类装入属性,数据自动封装到对象中
    @RequestMapping(value ="/update")
    public String update(User user){
        System.out.println(user);
        return "user";
    }

3.用封装类,把对象放进一个类中做属性,然后前台的话对应的name就用那个的对象的名字.属性就行了

@RequestMapping(value ="/add2")
    public String add2(UserEx u){
        System.out.println(u.getUser());
        return "user";
    }

前台使用user.userpasswrd作为属性即可就是这个对象名.属性

4. 传一个list集合的参数,整一个封装对象,对象里放一个list集合,记得要初始化,然后泛型放具体对象,然后看代码

<form action="${pageContext.request.contextPath}/user/add3.do" method="post">
           用户名:<input type="text" name="list[0].username">    <br>
           密  码:<input type="password" name="list[0].userpassword">     <br>
             <hr>
         用户名:<input type="text" name="list[1].username">    <br>
         密  码:<input type="password" name="list[1].userpassword">     <br>
         <hr>
         <input type="submit" value="提交">
         <input type="reset" value="重置">
     </form>

5.传一个Map集合,同样,整个封装类,属性弄个map集合,前台name就给map名[键名]就行了

前台代码

<form action="${pageContext.request.contextPath}/user/add4.do" method="post">
    用户名:<input type="text" name="map['username']">    <br>
    密  码:<input type="password" name="map['userpassword']">     <br>
    <hr>
    <input type="submit" value="提交">
    <input type="reset" value="重置">
</form>

后台输出map的结果为:

Spring和struts的区别

  struts Spring
实现机制 struts是基于过滤器实现的 SpringMVC是基于servlet实现的,servlet比过滤器快
运行速度

Struts是多例,请求来了之后创建多个对象:ActionContext,valuestack,Useraction,Actionsuport,

ModelDriven,每一次请求会创建一个action

SpringMVC是单例,同一个Controller请求,只会创建一个Controller
参数封装 基于属性进行封装 基于方法进行封装

猜你喜欢

转载自blog.csdn.net/yjt520557/article/details/86477228