java连接类,从servlet传递字符串
我正在使用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类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类,将查询传递给它们并获得结果
提前感谢。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();
}
}