WEB笔记(2)

来源:互联网 发布:西门子s7200编程电缆 编辑:程序博客网 时间:2024/06/01 09:41

@笔记很凌乱,但是全是精华@

——————————————————————
context一定要写吗?为什么在servlet中只要映射就可以了(web.xml中):

 ServletDemo1      -----》servlet名
 cn.huanglei_jmr.Servlet.ServletDemo1  ---》 ServletDemo1.class文件存放址/cn/huanglei_jmr/Servlet,cn上一级是工程名(即WEB应用文件名))
 

          ---》映射
  ServletDemo1 
 /ServletDemo1  ---》将上一行的servlet-name映射

到/ServletDemo1(此处),??即在地址栏客户端输入:localhost:8080/WEB应用名/

此处
 
**这也是将WEB应用到客户端啊???其实在新建一个WEB project 的时候在弹出的命名

框(假设WEB应用名字取demo)有一行叫做context root URL 它的名字会随之变为/demo。
相当于context中的path啦!!!

 

 

java.lang.UnsupportedClassVersionError-->这个错误是虚拟机的版本过低运行较高版

本的java程序!记得!!!!

 

一定要清楚客户端向服务器请求数据的过程!!
见Servlet流程图,一定要注意的是服务器是从response中拿到数据的(因为response中

有outpstream流),然后构成一个http响应回送给客户端!

WEB笔记(2)


WEB笔记(2)

输出流对象是从response中拿出来的,outputStream out=response.getOutputStream()
服务器向客户机写出数据,写出的数据是先放在response中的,当服务器发现response中有数据时,触发

一个http响应写到浏览器!(是谁把数据放在response中的?应该是WEB应用程序吧,classes里的程序不

是得到outputStream吗!)WEB笔记(2)

Servlet实例对象只会创建一次(驻内存),在第一次访问的时候被创建(而不是服务器加载的时候,要实现

加载是创建web.xml中使用:<load-on-startup>1</load-on-startup>)servlet接口定义了两个默认实现

类:GenericServlet和HttpServlet,通常继承后者!myeclipse中新建Servlet可以看到默认就是覆盖后

者!
HttpServlet指的是能够处理http请求的Servlet,在实现时候覆盖了service方法(每一次请求都会调用

这个方法),该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet

方法,如为post请求,则调用doPost方法,因此开发人员在编写Servlet时,通常只需复写doGet和doPost

方法,而不用去覆盖service方法!
因为它的service代码是形如:if(post){dopost()}等
------------------------\
一定要清楚客户端向服务器请求数据的过程!!
见Servlet流程图,一定要注意的是服务器是从response中拿到数据的(因为response中有outpstream流)

,然后构成一个http响应回送给客户端!
----------------------------、
servlet线程安全问题:多个进程访问同一个资源引发的!! 同一个不是同一种!
当然不能用同步!
标记接口(接口中什么都没定义(无方法和元素)!):sigleThreadModel接口线程安全接口
实现这样的接口就像打上一个标记,认为它是安全的(会创建多个servlet对象)。已淘汰!
-------------
接下来将Servlet的Api接口(一般学一门技术就将它提供的API学好就可以了)
1:servletconfig对象
 在实际开发中有些东西不适合在程序中写死,这类数据可以通过配置的方式配给servlet(在web.xml中

书写),例如:servlet采用码表;servlet连接哪个数据库;servlet采用哪个配置文件等
意思是:数据写在web.xml中,通过Servlet对象(如下代码)取到数据,然后再客户端输入网址就能访问!
<init-param>
<param-name>参数名</param-name>
<param-value>参数值(可以为文件,例如配置文件)</param-value>
</init-param>

在Servlet对象中的java文件中的代码取数据(class ServletDemo extendsHttpServlet):
 Stringvalue=this.getServletConfig().getInitparameter("参数名")
看API吧!
--
2 ServletContext
WEB容器在启动时,会为每一个WEB应用程序都创建一个对应的ServletContext对象(一个WEB应用不等于一

个Servlet对象,WEB应用相当于一个工程,而Servlet只是工程中的一个类放在classes里的),它代表当前

的WEB应用,而ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写Servlet时,可

以通过ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中所有的

Servlet共享同一个ServletContext对象,所以多个Servlet可以通过这个对象实现数据共享。

ServletContext对象通常也被称为Context域对象
----共享------
ServletDemo1中Stringdata="jmr";this.getServletContext.setAttribute("data",data);
ServletDemo2取到data
----------------------
ServletContext可以实现Servlet的转发:
例如Servlet不适合输出,转发给jsp(相当于一个html中可以嵌入java代码,这是服务端,若是客户端那

么是javascript咯),注意这个地方带个jsp不能通过context域(因为共享会引发线程安全问题),要用

request域
RequestDispatcherrd=this.getServletContext.getRequestDispacher("/1.jsp");
******************
重定向:找我借钱,我让你去找J借(客户机两次请求)
转发:找我借钱,我帮你去找J借(one)
*********************
ServletContext读取WEB应用中的资源文件
(在软件开发中的配置文件只有两种类型,properties(没嵌套关系),xml(配置的数据有嵌套关系))
*********************
*********************
把上面的一句话抽取出来:(一个WEB应用不等于一个Servlet对象,WEB应用相当于一个工程,而Servlet只

是工程中的一个类放在classes里的)
不要被eclipse里的工程迷惑,在新建的WEB工程中的src是没有这个目录的,当发布到服务器中其实是

classes文件夹(前面说了这个文件夹里写的是什么!)
******************88888
*********************
*********************
ServletContext读取WEB应用中的资源文件
(在软件开发中的配置文件只有两种类型,properties(没嵌套关系),xml(配置的数据有嵌套关系))
**获取properties中的数据模板(背):---->properties里面写了url等信息
InputStreamin=this.getServletContext().getResourceAsStream("/WEB-

INF/classes/db.properties");//资源文件放在哪里就怎么写,是web目录啊不是eclipse目录,客户访问

的是服务器的程序!
Properties props=new Properties(); //java中map的properties记得吗
props.load(in);
String url=props.getProperty("url");
String username=props.getProperty("username");
Stringpassword=props.getProperty("password");
读取资源文件不能用传统的方式:newFileInputStream("/classes/db.properties")是不行的,个相对

是java服务器的相对路劲(bin文件夹),用ServletContext读!
可以这样:Stringpath=this.getServletContext().getRealPth("/WEB-INF/classes/db.properties");
FileInputStream fi=newFileInputStream(path);//这种方法的好处是,不仅获取资源数据还可获取资

源名称,继续:Stringfilename=path.subString(path.lastIndexOf("\"+1));//截掉最后一个/后面的
*********************
*********************

原创粉丝点击