美文网首页
spring mvc

spring mvc

作者: luckee | 来源:发表于2019-01-28 14:30 被阅读0次

    spring mvc

    参数绑定

    image.png
    • 默认支持的类型
      ①、HttpServletRequest 对象
      ②、HttpServletResponse 对象
      ③、HttpSession 对象
      ④、Model/ModelMap 对象
    @RequestMapping("/defaultParameter")
        public ModelAndView defaultParameter(HttpServletRequest request,HttpServletResponse response,
                                HttpSession session,Model model,ModelMap modelMap) throws Exception{
            request.setAttribute("requestParameter", "request类型");
            response.getWriter().write("response");
            session.setAttribute("sessionParameter", "session类型");
            //ModelMap是Model接口的一个实现类,作用是将Model数据填充到request域
            //即使使用Model接口,其内部绑定还是由ModelMap来实现
            model.addAttribute("modelParameter", "model类型");
            modelMap.addAttribute("modelMapParameter", "modelMap类型");
             
            ModelAndView mv = new ModelAndView();
            mv.setViewName("view/success.jsp");
            return mv;
        }
    

    success.jsp主要代码

    <body>
        request:${requestParameter}
        session:${sessionParameter}
        model:${modelParameter}
        modelMap:${modelMapParameter}
    </body>
    
    • 基本类型
    <form action="basicData" method="post">
        <input name="username" value="10" type="text"/>
        <input type="submit" value="提交">
    </form>
    
    @RequestMapping("/basicData")
        public void basicData(int username){
            System.out.println(username);//10
        }
    

    or

    @RequestMapping("/basicData")
        public void basicData(@RequestParam(value="username") int name){
            System.out.println(username);//10
        }
    
    • 包装类型
    @RequestMapping("/basicData")
        public void basicData(Integer username){
            System.out.println(username);//10
        }
    
    • 简单POJO
      属性名应该和前端字段名一致

    • 复合POJO(A类含有一个B类类型的字段,B有b1,b2属性)
      关于B的数据,前端字段名应该为b.b1,b.b2

    • 数组类型

    • List类型

    • Map类型

    自定义converter

    package com.ys.util;
     
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import org.springframework.core.convert.converter.Converter;
     
    //需要实现Converter接口,这里是将String类型转换成Date类型
    public class DateConverter implements Converter<String, Date> {
     
        @Override
        public Date convert(String source) {
            //实现将字符串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            try {
                return dateFormat.parse(source);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //如果参数绑定失败返回null
            return null;
        }
     
    }
    

    配置converter

    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
         
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="converters">
                <!-- 自定义转换器的类名 -->
                <bean class="com.ys.util.DateConverter"></bean>
            </property>
        </bean>
    

    配置静态资源不被DispacherServlet拦截

    • 使用*.do这种
    • 在DispacherServlet之前配置默认的servlet
    <!--要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了,我想性能是最好的吧。--> 
        <servlet-mapping> 
            <servlet-name>default</servlet-name> 
            <url-pattern>*.css</url-pattern> 
        </servlet-mapping> 
        <servlet-mapping> 
            <servlet-name>default</servlet-name> 
            <url-pattern>*.js</url-pattern> 
        </servlet-mapping> 
    
    • 在spring.xml中配置对静态资源不过滤
    <!-- 配置静态文件过滤器 -->
        <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
        <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
      
    
    • 使用<mvc:default-servlet-handler/>
      在springmvc.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

    静态资源的位置

    我看到有好几种位置

    • resources下的static文件夹
    • webapp下,安全性低,可以直接通过浏览器输入url访问,不需要映射
    • webapp/web-inf下,客户端无法访问,只有服务端可以访问,安全性高

    相关文章

      网友评论

          本文标题:spring mvc

          本文链接:https://www.haomeiwen.com/subject/ltyajqtx.html