浏览 1929 次
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-08
在应用的META-INF文件夹下context.xml文件中 <Context> <Resource name="jdbc/oracle" 配置JDNI的名字 type="javax.sql.DataSource" 绑定资源的类型 password="sd0605" driverClassName="oracle.jdbc.driver.OracleDriver" 驱动名 maxIdle="1"最大连接数 maxWait="-1"等待时间,配置为-1就是无限等待,只到有空闲连接为止 username="sd0605" url="jdbc:oracle:thin:@192.168.0.39:1521:TARENADB" maxActive="3" 最大活动连接数/> </Context> 以下是从连接池去取数据库连接的代码 public static Connection getConnection(String JNDIName){ Connection conn = null; try{ Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); //这个是在tomcat下默认绑定Context的JNDIname DataSource ds = (DataSource) envCtx.lookup(JNDIName); conn = ds.getConnection(); } catch (NamingException ne){ ne.printStackTrace(); } catch (SQLException se){ se.printStackTrace(); } return conn; } 二、Java EE编程分层 表现层,业务层,数据层。 表现层,也就算用来显示数据,接受数据的。JSP,Servlet 业务层,是处理核心业务的程序 EJB,JDBC(Hibernate) 数据层,也就是数据库,用来存放数据。Oracle,SQLServer MVC框架 Model,模型层,这一层一般是进行数据库访问,并且封装对象,这一层中也存放在访问数据库取出信息封装成对象的类,也就是实体类的信息, 可以使用JDBC或者Hibernate实现这一层的功能。 Ctrl,控制曾,用来相应请求和调用写好的相应的访问数据库的方法,这一层是用来控制请求的响应的,现在我们是使用Servlet来实现这一层, 不过一般是会用开源的MVC框架来实现这层,例如struts,或者是Spring的MVC框架。 View,表现层,他只用来显示数据和收集必要数据,收集数据的一般是form表单,不过要保证数据的正确性要是用JavaScript验证信息,以后我 们会学到的JSP(java server page)就是用来表现、显示数据的。 三、Servlet的控制流转 ServletContext,Servlet上下文对象,在每个Servlet中都会有一个ServletContext的引用,这个ServletContext是一个全局的对象,每个应用 中只有一个ServletContext对象。 HttpServlet中的getServletContext()方法,获得ServletContext对象。 ServletContext类的getRequestDispatcher(String path)方法获得一个RequestDispatcher对象,并且跳转到指定的Servlet, getRequestDispatcher(String path)方法中的参数就是path,就是指定跳转的Servlet的url-pattern。 RequestDispatcher类的forward(ServletRequest request, ServletResponse response) 方法,可以把请求对象转发给其他的Servlet。 include用在v层 forward用在c层 ServletRequest.getRequestDispatcher(); //relative ServletContext.getRequestDispatcher(); //absolute 一个Servlet对应一个Config,不能互相读取 要想让所有的Serlvet都能读到参数:配置Context初始化参数,或者配置JNDI Naming的初始化参数 (1)配置Context容器的初始化参数 <context-param> <param-name>email</param-name> <param-vlaue>liyan@tarena.com.cn</param-vlaue> </context-param> 在servlet的使用 getSevletContext().getInitParameter("email"); (2)配置JNDI Naming的初始化参数 <env-entry> <env-entry-name>email<env-entry-name> <env-entry-type>java.lang.String<env-entry-type> <env-entry-value>liyan@tarena.com.cn<env-entry-value> </env-entry> 使用,得到初始化参数 Context ctx = new InitialContext(); String email = (String)ctx.lookup("java:comp/env/email"); 四、会话 会话是可以保存状态的 Session(会话)和Cookie(会话跟踪机制) Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题,但是他和ServletRequest对象是不同的,他会在有需要时创建, 但是他的生命周期会比请求对象要长。Session对象的生命周期也是有限制的,如果长时间的没有访问,就会销毁掉Session对象,可以通 过Session对象的 setAttribute(String name, Object o) 和getAttribute(String name)来存取数据信息。Session是用户级的对象。 public void service(ServletRequest request,ServletResponse response){ String user = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession session = request.getSession(true);//使用请求对象来创建Session session.setAttribute("username", user); session.setAttribute("passwd", pass); } getSession(true)就表示如果Session不存在就创建一个新的Session,并把Session的标识SessionID写到Cookie中,如果存在就是用这个 Session。getSession(false)就是在Session不存在时不会创建新Session而是返回null。如果使用getSession()方法,就等同于getSession(true)。 注意:ServletRequest对象适用于传输大量的数据,因为其生命周期比较短,可以有效的节省内存资源。 大数据量的传输或保存不适合使用Session空间。 Cookie,是记录用户的Session信息,也可以记录用户的请求信息,也就是SessionID,来分辨哪一个用户是否登陆过。在每次登陆时, 还会将Cookie发送回服务器端,Cookie是用来跟踪Session的。 public void service(ServletRequest request,ServletResponse response){ String user = request.getParameter("user"); String pass = request.getParameter("pass"); Cookie userCookie = new Cookie("user", user); userCookie.setMaxAge(60 * 60 * 24 * 365);//设置Cookie的最大有效期,秒为单位 Cookie passCookie = new Cookie("pass", pass); passCookie.setMaxAge(60 * 60 * 24 * 365); response.addCookie(userCookie); response.addCookie(passCookie); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |