servlet
servlet就是一个服务端应用程序,作用就是可以对客户端的请求作出响应。
Servlet一些重要细节问题
1.Myeclipse中修改wen应用名称,需要同时修改这个web应用名的映射路径Web context-root
2.3.由于conf中的context.xml文件的配置存在检测所有wen.xml所以Web.xml文件改动不必要重新发布
5
1.servlet线程安全
多个客户端并发访问一个web资源;web服务器会为每个客户机创建各自线程,并且调用service方法,操作同一个资源就出现线程安全问题
解决上述同步问题可以加syschronized,但是这样就变成单线程访问了绝对不可取
实现SingleThreadModel可以解决,但是它是非标准解决方案,内部是创建了多个servlet实例,各自有各自的变量a,java EE2.4废除
子类不能抛出比父类更多的异常
2.servletConfig和应用场景
web容器调用servlet,创建servlert实例时候将web.xml中一些servlert的配置信息封装在servlertConfig中传递给servlert ,调用servlert的 @Overridepublic void init(ServletConfig config)我们也可以用this.getServletConfig()方法获取servlertConfig实例
实际开发中有些东西不适合在servlet程序中写死,可以配置在servlet配置文件中例如servlet采用哪个码表,servlet连接哪个数据库 用户名,密码,servlet采用哪个配置文件
3.servletContext和应用场景
获取ServletContext; servletContext就是这个web应用;可以实现web应用的数据共享;servlet的数据共享;this.getServletContext();this.getServletConfig().getServletContext();
servletContext域:他是一个容器,作用范围整个web应用
描述:当整个web容器启动时候会加载里面的web应用,每一个web应用都会创建各自的ServletContext对象;web容器发现web.xml配置了相关参数,会自动装载在servletContext中
应用场景
servletContext域不能转发数据到jsp;因为setArrtibution("day",value);属性名相同;并发会覆盖存的数据
聊天室,配置连接哪个数据库全局配置
域: request域session域 page域context域名(ServletContext)
3.1 ServletContext读取web应用中的资源文件
模板代码读取propertiese文件public class UserDao { /** * 实际开发中使用静态代码块读取配置文件;类加载器方式读取注意事项 * 1.配置文件不能太大;因为类加载器会加载到内存 * 2.配置文件更改不会做到实时更新;因为类加载机制内存中有一份这个文件就不去再次加载了 * ,如果配置文件可能会更改那么我们用类加载器得到文件绝对路径再用传统FileInputStream去读取 */ private static Properties pro; static{ InputStream input= UserDao.class.getClassLoader().getResourceAsStream("db.properties"); pro=new Properties(); try { pro.load(input); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new ExceptionInInitializerError(e); } } public void Update() throws IOException{ String url=pro.getProperty("url"); String username=pro.getProperty("username"); System.out.println("url:"+url+"username:"+username); } }
// String path= UserDao.class.getClassLoader().getResource("db.properties").getPath(); // try { // FileInputStream finput=new FileInputStream(path); // pro=new Properties(); // pro.load(finput); // // } catch (Exception e1) { // // TODO Auto-generated catch block // e1.printStackTrace(); // throw new ExceptionInInitializerError(e1); // }//
用类装载器读取配置文件
软件开发中设置配置文件,看要配置的信息之间是否有关系,有关系用xml,没关系就用.properties文件(配置数据库相关)
web工程里面资源文件不能用传统方式读取,下面代码不可行,因为它是相对java虚拟机的路径,如果非要读取你可以在tomcat bin\创建classes创建配置文件