• SpringMVC之@RequestMapping、ThreadLocal、DBCP、JNDI数据源管理


    一、SpringMVC之@RequestMapping

    • 通过参数条件缩小路径映射,params参数:URL中只有存在params指定的参数时才被允许访问路径映射的方法,如下所示:

    1 @RequestMapping(value="/paramValue/{userName}",params="myParam",method = RequestMethod.GET)
    2     public void setupForm(@PathVariable String userName) {
    3         System.err.println("userName:" + userName);
    4     }

    例如当访问下面url时才会触发上面方法的执行:

    http://localhost:8080/SMVCAnnotationCURD/user/paramValue/zhangsan?myParam
    • @RequestMapping 6个基本用法
    1. 基本用法,只有一个value,如下所示:
    1 @RequestMapping("/getAll")
    2     public ModelAndView getAllUser(){
    3         UserDaoImpl userDao = new UserDaoImpl();
    4         List<User> uList = userDao.getAllUser();
    5         ModelAndView mv = new ModelAndView();  
    6         mv.addObject("users", uList);  
    7         mv.setViewName("userList");  
    8         return mv;  
    9     }

      当请求如下url时会执行上面方法:

    http://localhost:8080/SMVCAnnotationCURD/user/getAll

        2.参数绑定,@RequestParam,还可以设置默认值与required属性,如下所示:

    1 @RequestMapping(value="/paramBind")
    2     public void paramBind(@RequestParam(value="userName",defaultValue="zhangsan",required=true) String userName) {
    3         System.err.println("userName:" + userName);
    4     }

         3.还支持REST风格,REST风格参数-1,如下所示

    1 @RequestMapping(value="/rest1/{userName}",method = RequestMethod.GET)
    2     public void rest1(@PathVariable String userName) {
    3         System.err.println("userName:" + userName);
    4     }

         4.REST风格参数-2,如下所示:

      

    1 @RequestMapping(value="/rest2/{userName}",method = RequestMethod.GET)
    2     public void rest2(@PathVariable("userName") String name) {
    3         System.err.println("name:" + name);
    4     }

        5.url中绑定多个参数,代码如下所示:

      

    1 @RequestMapping(value="/multiParams/{userName1}/{userName2}",method = RequestMethod.GET)
    2     public void multiParams(@PathVariable String userName1,@PathVariable String userName2) {
    3         System.err.println("userName1:" + userName1 + ",userName2:" + userName2);
    4     }

    其中{userName1}/{userName2}之间的/也可以换成其它的合法符号。

        6.支持正则表达式,代码如下所示:

    1 @RequestMapping(value="/regex/{userName:[a-z]+}.{age:[\\d]+}",method = RequestMethod.GET)
    2     public void regex(@PathVariable String userName,@PathVariable int age) {
    3         System.err.println("userName:" + userName + ",age:" + age);
    4     }

    其中只要userName为字母并且age为数字便可。

    二、关于ThreadLocal

    ThreadLocal是线程的局部变量,每个线程都有自己的局部变量,独立于变量的初始化副本,ThreadLocal接口主要有以下4个方法:

    1、void set(T value):将此线程局部变量的当前线程副本中的值设置为指定值

    2、T get():返回此线程局部变量的当前线程副本中的值

    3、protected  T initialValue():返回此线程局部变量的当前线程的初始值

    4、void remove():移除此线程局部变量的值。

    关于为每个线程维护一个变量副本的实现思路:在ThreadLocal类中有一个ThreadLocalMap,其中键为线程对象,值为对应线程的变量副本。

    三、DBCP、JNDI维护数据库连接池

    在web应用中通常要对数据库连接池进行管理,一般用DBCP的多,下面主要根据自己理解的程度介绍一下:

    1、DBCP:通常添加一个system.properties配置文件,设置数据源,如下:

    #mysql datasource
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc\:mysql\://localhost\:3306/novaframe
    username=novaframe
    password=novacloud
    initialSize=10
    maxActive=50
    maxIdle=20
    minIdle=5
    maxWait=60000
    connectionProperties=useUnicode=true;characterEncoding=utf-8
    defaultAutoCommit=true
    defaultReadOnly=
    defaultTransactionIsolation=READ_UNCOMMITTED
    

      然后便可以通过BasicDataSourceFactory.createDataSource(Properties p);获取数据源

    2、JNDI:Java Naming and Directory Interface,Java命名和目录接口,是一组在Java应用中访问命名和目录服务的API

      命名服务:将名称和对象联系起来,可以用名称访问对象

      目录服务:一种命名服务,而且对象对象不但有名称,还有属性

     使用方法:在server.xml中设置数据源,以MySQL数据库为例,如下:在<GlobalNamingResources></GlobalNamingResources>节点中加入如下节点,

    <Resource
    
    name="jdbc/DBPool"
    
    type="javax.sql.DataSource"
    
    password="root"
    
    driverClassName="com.mysql.jdbc.Driver"
    
    maxIdle="2"
    
    maxWait="5000"
    
    username="root"
    
    url="jdbc:mysql://127.0.0.1:3306/test"
    
    maxActive="4"/>

      然后获取数据源方法:

    Contextenv=null;
    env=(Context)newInitialContext().lookup(" java:comp/env"); DataSource pool=(DataSource)env.lookup("jdbc/DBPool");

      有时也可以直接在system.properties中设置jndi name,然后直接

    DataSource pool=(DataSource)env.lookup(jndi name);便可。
  • 相关阅读:
    SAP 多料号展BOM
    SAP QM 检验批可用库存回转为待检验库存
    SAP QM UD检验批回转为REL待检验状态
    在ABAP中获取应用程序服务器的IP地址
    SAP连接外部数据库后批量写入数据
    Java调用Axis2用SAP WSDL生成的Stub文件
    用最新的采购信息记录更新采购单的价格——BAPI_PO_CHANGE
    SAP QM——QA01、QA02、QA03屏幕增强
    Java递归实现一、二、三级菜单查询
    ABAP——查询
  • 原文地址:https://www.cnblogs.com/zhli/p/3084077.html
Copyright © 2020-2023  润新知