Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java连接类,从servlet传递字符串_Java_Jsp_Servlets_Connection - Fatal编程技术网

java连接类,从servlet传递字符串

java连接类,从servlet传递字符串,java,jsp,servlets,connection,Java,Jsp,Servlets,Connection,我正在使用JSP和servlet开发一个web应用程序。数据库:Oracle10,容器:Glassfish 我开发了一个创建连接的类 Conn.java: 然后我有另外4个用于选择、插入、更新和删除事务的类,它们使用上述Conn.java类来获取连接: Select.java INSERT、UPDATE和DELETE的编码方式与上述Select.java的编码方式类似 所以在所有servlet中,我只是使用这些4SELECT、INSERT、UPDATE、DELETE类,将查询传递给它们并获得结果

我正在使用JSP和servlet开发一个web应用程序。数据库:Oracle10,容器:Glassfish

我开发了一个创建连接的类

Conn.java:

然后我有另外4个用于选择、插入、更新和删除事务的类,它们使用上述Conn.java类来获取连接:

Select.java

INSERT、UPDATE和DELETE的编码方式与上述Select.java的编码方式类似

所以在所有servlet中,我只是使用这些4SELECT、INSERT、UPDATE、DELETE类,将查询传递给它们并获得结果

示例Servlet

它工作得很好,但现在我们的要求是在用户登录后更改数据库字符串。因此,我想将特定于用户的属性文件名传递给Conn.java类。因此,我将属性文件名存储在cookie中

我有一个办法:

获取所有servlet中的cookie值 将cookie值传递给Select.java类的selectData方法,并从该类传递该值 将cookie值传递给Conn.java类的getConn方法 所以我想知道是否有更好的方法将这个连接字符串文件名传递给Conn.java类


提前感谢。

HttpSession是存储用户信息的地方,需要考虑一些问题

在您的情况下,您似乎有许多不同的web应用程序,每个应用程序都有不同的会话,您需要更新所有应用程序

我更喜欢另一种方法,这是个人观点,可以在ThreadLocal类中讨论。 您可以编写一个servlet过滤器,它将

读取cookie值 将其存储在本地线程中 在filter.doFilter方法之后,您必须清理它这一点非常重要,因此您没有机会混合会话,只需将clean方法放在finally块中,这样无论发生什么情况,它都会被执行。 这种方法的主要优点是,您可能无法访问HttpSession或HttpServletRequest,并且仍然能够在ThreadLocal中获取值

您可以使用的ThreadLocal容器示例如下:

public class ThreadLocalContainer {
   private static ThreadLocal<String> userId=new ThreadLocal<String>();
   public static String getUserId(){
       return userId.get();
   }
   public static void setUserId(String uid){
        userId.set(uid);
   }
   public static void resetUserId(){
        userId.remove();
   }
}
然后,即使您没有访问http上下文的权限,您也可以通过在代码中的任何地方调用ThreadLocalContainer.getUserId来访问用户ID


确保在所有webapps中定义servlet过滤器,以便正确设置用户ID。

HttpSession是存储用户信息的地方,需要考虑一些问题

在您的情况下,您似乎有许多不同的web应用程序,每个应用程序都有不同的会话,您需要更新所有应用程序

我更喜欢另一种方法,这是个人观点,可以在ThreadLocal类中讨论。 您可以编写一个servlet过滤器,它将

读取cookie值 将其存储在本地线程中 在filter.doFilter方法之后,您必须清理它这一点非常重要,因此您没有机会混合会话,只需将clean方法放在finally块中,这样无论发生什么情况,它都会被执行。 这种方法的主要优点是,您可能无法访问HttpSession或HttpServletRequest,并且仍然能够在ThreadLocal中获取值

您可以使用的ThreadLocal容器示例如下:

public class ThreadLocalContainer {
   private static ThreadLocal<String> userId=new ThreadLocal<String>();
   public static String getUserId(){
       return userId.get();
   }
   public static void setUserId(String uid){
        userId.set(uid);
   }
   public static void resetUserId(){
        userId.remove();
   }
}
然后,即使您没有访问http上下文的权限,您也可以通过在代码中的任何地方调用ThreadLocalContainer.getUserId来访问用户ID


确保在所有webapps中定义servlet过滤器,以便正确设置用户ID。

HttpSession处理与会话相关的信息。通常,您会将用户信息存储在那里,并让服务器处理其存储方式的详细信息。@SJuan76是的HttpSession是正确的方式,但我使用Cookies在部署在同一服务器上的所有web应用程序之间共享用户ID HttpSession处理与会话相关的信息。通常,您会将用户信息存储在那里,并让服务器处理其存储方式的详细信息。@SJuan76是的HttpSession是正确的方式,但我使用Cookies在部署在同一服务器上的所有web应用程序之间共享用户ID
public class SampleServ extends HttpServlet 
{
    Select select = new Select();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
        String data[][];
        data = select.selectData(QUERY_GOES_HERE);
        //AND OTHER CODE
    }
}
public class ThreadLocalContainer {
   private static ThreadLocal<String> userId=new ThreadLocal<String>();
   public static String getUserId(){
       return userId.get();
   }
   public static void setUserId(String uid){
        userId.set(uid);
   }
   public static void resetUserId(){
        userId.remove();
   }
}