• SpringMVC进阶


    1.springmvc(注解版本)

    注解扫描

    <?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: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-3.0.xsd">
    
        <!--让spring容器去扫描注释-->
        <context:component-scan base-package="com.juaner.app14"/>
    
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>

    Action类

    @Controller
    public class HelloAction {
        public HelloAction(){
            System.out.println(this .hashCode() );
        }
        @RequestMapping(value = "/hello.action")
        public String hello(Model model)throws Exception{
            System.out.println("hello");
            model.addAttribute("message","this is the first....");
            return "success";
        }
    
        @RequestMapping(value = "/bye.action")
        public String bye(Model model)throws Exception{
            System.out.println("bye");
            model.addAttribute("message","bye");
            return "success";
        }
    }

    2.一个Action中,写多个类似的业务控制方法

    @Controller
    @RequestMapping(value="/user")
    public class UserAction {
    
        @RequestMapping(value = "/register")
        public String register(Model model)throws Exception{
            model.addAttribute("message","注册成功");
            return "/jsp/success.jsp";
        }
        @RequestMapping(value = "/login")
        public String login(Model model)throws Exception{
            model.addAttribute("message","登录成功");
            return "/jsp/success.jsp";
        }
    }

    3.在业务控制方法中写入普通变量收集参数,限定某个业务控制方法,只允许GET或POST请求方式访问

    @Controller
    @RequestMapping(value="/user")
    public class UserAction {
    
        @RequestMapping(method= RequestMethod.POST,value = "/register")
        public String register(Model model,String username,double salary)throws Exception{
            System.out.println(username+salary);
            model.addAttribute("message","注册成功");
            return "/jsp/success.jsp";
        }
        @RequestMapping(value = "/login", method= {RequestMethod.POST,RequestMethod.GET})
        public String login(Model model,String username,double salary)throws Exception{
            System.out.println(username+salary);
            model.addAttribute("message","登录成功");
            return "/jsp/success.jsp";
        }
    }

    4.在业务控制方法中写入HttpServletRequest,HttpServletResponse,Model等传统web参数

    @Controller
    @RequestMapping(value="/user")
    public class UserAction {
    
        @RequestMapping(method= RequestMethod.POST,value = "/register" )
        public void  register(HttpServletRequest request, HttpServletResponse response)throws Exception{
            String username = request.getParameter("username");
            String salary = request.getParameter("salary");
    
            System.out.println(username+salary);
            request.setAttribute("message","转发参数");
    //        response.sendRedirect(request.getContextPath()+"/jsp/success.jsp");
            request.getRequestDispatcher("/jsp/success.jsp").forward(request,response);
        }
    }

    5.在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

      jsp中的元素name属性不用加user.前缀

    @Controller
    @RequestMapping(value="/user")
    public class UserAction {
    
        @InitBinder
        protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
            //向springmvc中注册一个自定义的类型转换器
            //参数一:将string转成什么类型的字节码
            //参数二:自定义转换规则
            binder.registerCustomEditor(Date.class,
                    new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
        }
        @RequestMapping(method= RequestMethod.POST,value = "/register" )
        public String   register(User user, Model model)throws Exception{
            System.out.println("用户注册");
            model.addAttribute("user",user);
            System.out.println(new Timestamp(user.getHiredate().getTime()));
    
            return "/jsp/success.jsp";
        }
    }

      在业务控制方法中写入User,Admin多个模型收集参数,需要更大的模型包装User,Admin

    6.在业务控制方法中收集数组参数

    @Controller
    @RequestMapping(value = "/emp")
    public class EmpAction {
        @RequestMapping(value = "/deleteAll",method = RequestMethod.POST)
        public String deleteAll(Model model,int[] id)throws Exception{
            for(int i:id)
            {
                System.out.println(i);
            }
            model.addAttribute("message","批量删除员工成功");
            return "/jsp/success.jsp";
        }
    }

    jsp

    <form action="${pageContext.request.contextPath}/emp/deleteAll.action" method="post">
        <table>
            <tr><th>
                编号
            </th><th>
                姓名
            </th></tr>
            
            <tr>
                <td>
                    <input type="checkbox" name="id" value="1123">
                </td>
                <td>哈哈</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="id" value="2123">
                </td>
                <td>嘻嘻</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="id" value="3">
                </td>
                <td>呵呵</td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="提交">
                </td>
            </tr>
        </table>
    </form>

    7.在业务控制方法中收集List<JavaBean>参数

    bean

    public class Bean {
        private List<Emp> empList = new ArrayList<Emp>();
        public  Bean(){}
    
        public List<Emp> getEmpList() {
            return empList;
        }
    
        public void setEmpList(List<Emp> empList) {
            this.empList = empList;
        }
    }

    action

    @Controller
    @RequestMapping(value = "/emp")
    public class EmpAction {
        @RequestMapping(value = "/addAll",method = RequestMethod.POST)
        public String addAll(Model model,Bean bean)throws Exception{
            for(Emp emp:bean.getEmpList())
            {
                System.out.println(emp);
            }
            model.addAttribute("message","批量添加员工成功");
            return "/jsp/success.jsp";
        }
    }

    jsp

    <form action="${pageContext.request.contextPath}/emp/addAll.action" method="post">
        <table>
            <tr>
                <td><input name="empList[0].username" type="text" value="哈哈"></td>
                <td><input name="empList[0].salary" type="text" value="6000"></td>
            </tr>
            <tr>
                <td><input name="empList[1].username" type="text" value="呵呵"></td>
                <td><input name="empList[1].salary" type="text" value="7000"></td>
            </tr>
            <tr>
                <td><input name="empList[2].username" type="text" value="嘻嘻"></td>
                <td><input name="empList[2].salary" type="text" value="8000"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input  type="submit" value="注册"></td>
            </tr>
        </table>
    </form>

    8.结果的转发和重定向

    @Controller
    @RequestMapping(value="/emp")                
    public class EmpAction {
        
        @RequestMapping(value="/find")
        public String findEmpById(int id,Model model) throws Exception{
            System.out.println("查询"+id+"号员工信息");
            
            //转发到EmpAction的另一个方法中去,即再次发送请求
            return "forward:/emp/update.action";
            
            //重定向到EmpAction的另一个方法中去,即再次发送请求
            //return "redirect:/emp/update.action?id=" + id;
    
        }
    
        @RequestMapping(value="/update")
        public String updateEmpById(int id,Model model) throws Exception{
            System.out.println("更新" + id +"号员工信息");
            model.addAttribute("message","更新员工信息成功");
            return "/jsp/ok.jsp";
        }
        
    }

     

    9.异步发送表单数据到JavaBean,并响应JSON文本返回

    1.导入包jackson-core-asl-1.9.11、jackson-mapper-asl-1.9.11

    2.配置json转换器

        <!--json转换器-->
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
                </list>
            </property>
        </bean>

    3.方法名中加注解

        /**
         * @ResponseBody Emp 表示让springmvc将Emp对象转成json文本
         */
        @RequestMapping(value="/bean2json")
        public @ResponseBody Emp bean2json() throws Exception{
            //创建Emp对象
            Emp emp = new Emp();
            emp.setId(1);
            emp.setUsername("哈哈");
            emp.setSalary(7000D);
            emp.setHiredate(new Date());
            return emp;
        }
        
        
        @RequestMapping(value="/listbean2json")
        public @ResponseBody List<Emp> listbean2json() throws Exception{
            //创建List对象
            List<Emp> empList = new ArrayList<Emp>();
            //向List对象中添加三个Emp对象
            empList.add(new Emp(1,"哈哈",7000D,new Date()));
            empList.add(new Emp(2,"呵呵",8000D,new Date()));
            empList.add(new Emp(3,"嘻嘻",9000D,new Date()));
            //返回需要转JSON文本的对象
            return empList;
        }
    
        
        @RequestMapping(value="/map2json")
        public @ResponseBody Map<String,Object> map2json() throws Exception{
            //创建List对象
            List<Emp> empList = new ArrayList<Emp>();
            //向List对象中添加三个Emp对象
            empList.add(new Emp(1,"哈哈",7000D,new Date()));
            empList.add(new Emp(2,"呵呵",8000D,new Date()));
            empList.add(new Emp(3,"嘻嘻",9000D,new Date()));
            //创建Map对象
            Map<String,Object> map = new LinkedHashMap<String,Object>();
            //向Map对象中绑定二个变量
            map.put("total",empList.size());
            map.put("rows",empList);
            //返回需要转JSON文本的对象
            return map;
        }
        
  • 相关阅读:
    python 接口自动化测试--框架定型(六)
    python 接口自动化测试--框架整改(五)
    持续集成接口自动化-jmeter+ant+jenkins(一)
    记 suds 模块循环依赖的坑-RuntimeError: maximum recursion depth exceeded
    python 接口自动化测试(四)
    python 接口自动化测试(三)
    python 接口自动化测试(二)
    python 接口自动化测试(一)
    Jmeter 正则提取器
    python 正则提取(re模块)
  • 原文地址:https://www.cnblogs.com/juaner767/p/5746982.html
Copyright © 2020-2023  润新知