JavaWeb

来源:互联网 发布:远光软件怎么样 编辑:程序博客网 时间:2024/06/08 19:56

1、servlet的入门

1.1 什么是servlet(1)servlet 是运行在 Web 服务器中的小型 Java 程序。(2)servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。1.2 实现servlet(1)实现Servlet接口    * 如果实现接口,需要把接口里面的方法都实现(2)继承GenericServlet, HttpServlet类    * 如果继承类,不需要把类中的方法都实现(3)需要web服务器知道java程序不是一个普通的java程序,而是一个servlet    * 通过配置进行操作    * 在web项目中,web.xml里面进行配置1.3 servlet的入门程序(1)写一个servlet,实现向页面输出内容 hello servlet(2)步骤第一步,创建一个类,使用这个类继承GenericServlet类第二步,实现类里面的 service(ServletRequest req, ServletResponse res)     * ServletRequest代表请求    * ServletResponse代表响应第三步,使用ServletResponse向页面输出内容 getWriter() 第四步,在web项目中的web.xml进行配置,让服务器知道是一个servlet    * <servlet>        <servlet-name>servletDemo1</servlet-name>        <servlet-class>com.mythmayor.servlet.ServletDemo1</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>servletDemo1</servlet-name>        <url-pattern>/hello</url-pattern>    </servlet-mapping>

2、servlet的执行过程(画图分析执行过程)

2.1 执行过程(1)根据在浏览器地址栏输入的地址,找web.xml中相同的url-pattern(2)找到了url-pattern,对应的servlet-name(3)根据找到的servlet-name到另外一个标签里面(servlet)相同名称的servlet-name(4)在servlet标签里面找到了相同名称的servlet-name,找servlet的包类路径servlet-class利用反射原理,让servlet里面的service方法执行

3、servlet的生命周期

3.1 什么是生命周期:一个人从出生到死亡3.2 servlet的生命周期:从servlet创建到servlet销毁的过程3.3 在servlet接口里面有五个方法,其中有三个方法是与生命周期相关的方法(1)init方法,在servlet创建时候执行这个方法,执行一次,servlet在第一次访问时候创建(2)service方法,在每次访问servlet时候会执行这个方法,执行多次(3)destroy方法,销毁servlet时候执行这个方法,执行一次

4、servlet开发细节的问题

4.1 HttpServletRequest和ServletRequest关系    HttpServletResponse和ServletResponse关系(1)servletRequest和serlvetResponse不带协议     HttpServletRequest和HttpServletResponse带协议(2)sun公司设计时候,认为未来互联网的发展有很多的协议,目前只是http协议4.2 在GenericServlet类里面有init没有参数的方法和init有参数的方法的关系(1)有参数init方法最终也要调用init没有参数的方法,直接使用init没有参数的方法就可以了4.3 在HttpServlet类里面service方法和doxxx方法关系(1)根据提交的方式,调用不同的doXX的方法比如提交方式是get,调用doGet方法;比如提交方式是post,调用doPost方法(2)一般在开发中,直接写doGet和doPost方法就可以了(3)一般在创建servlet时候,直接继承HttpServlet实现servlet4.4 在服务器启动时候创建servlet(1)通过配置文件进行配置 ,在servlet标签里面写标签 <load-on-startup>正整数的值</load-on-startup>

Load-on-startup 控制servlet的加载
当值为0或者大于0的时候,代表当服务器启动的时候就会去加载这个servlet
当没有指定或者为负数时,代表该servlet只有被使用的时候才会去加载
它的正数值越小,优先级越高
如果值相同的话,那先加载谁是由服务器内部自己决定的

4.5 简化编程(1)当通过get提交方式时候,实现从1加到100     当通过post提交方式时候,实现从1加到100(2)无论什么提交方式,代码都能执行到    * 在dopost方法里面调用doget方法

5、url-pattern的配置

5.1 配置有三种方式第一种方式:完全路径匹配(1)写法 : /aa   /hello第二种方式:目录匹配(1)写法:  /aa/*第三种方式:扩展名匹配(1)写法:  *.do   *.action5.2 优先级完全路径匹配 > 目录匹配 > 扩展名匹配

6、开发中路径的问题

6.1 相对路径(1)在html文件中引入图片(2)有三种情况第一种:图片和html在同一个目录下面    * 直接写图片的名称第二种:图片在html的上层目录    * 写 ../ 表示上层目录第三种:图片在html的下层目录    * 直接写目录名称和图片名称6.2 绝对路径(一般开发中都使用)(1)第一种写法:http://ip地址+端口号/文件的路径    <img src="http://127.0.0.1:8080/path02/a.jpg"/>(2)第二种写法:直接写 /项目名称/文件路径    <img src="/path01/cc/c.jpg"/>

7、重定向和转发

7.1 重定向(1)使用的是客户端路径。地址栏会发生改变。(2)重定向请求两次,使用的是客户端路径,携带项目名称 ,比如 /myth/demo3      (3)举例:找张三借钱,但是张三没有钱,然后张三告诉我李四有钱,并告诉我李四的地址,于是我去找李四,最后借到了钱。7.2 转发(1)使用的是服务端路径。地址栏不会发生改变。(2)转发请求一次,使用的是服务器端路径,不需要携带项目名称 , 比如 /demo4     (3)举例:找张三借钱,但是张三没有钱,于是张三去找李四借到了钱,最后张三把钱给了我。

8、ServletConfig对象

8.0 创建ServletConfig对象(1)直接使用方法创建对象 getServletConfig()8.1 得到当前运行的servlet的名称(1)web.xml中 <servlet-name>ConfigDemo1</servlet-name>(2)String getServletName() 8.2 创建servletContext对象(1)ServletContext getServletContext() (2)一般都使用 getServletContext()方法8.3 获取初始化参数(1)在web.xml中进行配置初始化参数在servlet标签里面进行配置(2)String getInitParameter(String name) :根据名称得到值(参数是初始化参数名称)    * 代码    //得到servletconfig对象    ServletConfig config = getServletConfig();    //getInitParameter(String name)    String username = config.getInitParameter("username");    String password = config.getInitParameter("password");     Enumeration getInitParameterNames()  :得到所有的初始化参数的名称    * 代码    //得到servletconfig对象    ServletConfig config = getServletConfig();    //得到所有的初始化参数名称    Enumeration<String> enumrEnumeration = config.getInitParameterNames();    //得到每个参数的名称    while(enumrEnumeration.hasMoreElements()) {        String name = enumrEnumeration.nextElement();        //根据name得到值        String value = config.getInitParameter(name);        System.out.println(name+" :: "+value);    }

9、ServletContext对象

9.1 创建ServletContext对象(1)第一种方式,使用ServletConfig对象里面的方法 getServletContext()(2)第二种方式,直接使用 getServletContext()9.2 获取全局的初始化参数(1)配置全局初始化参数  <context-param>    <param-name>url</param-name>    <param-value>localhost</param-value>  </context-param>(2)String getInitParameter(String name) :根据名称得到全局初始化参数的值    * 代码    //得到servletContext对象    ServletContext context = getServletContext();    //根据名称得到全局初始化参数的值    String url = context.getInitParameter("url");    String name = context.getInitParameter("name");     Enumeration getInitParameterNames()  :得到所有的全局初始化参数的名称    * 代码    //得到servletContext对象    ServletContext context = getServletContext();    //使用方法得到所有的全局初始化参数的名称    Enumeration<String> enumrEnumeration = context.getInitParameterNames();    //得到每个全局初始化参数的名称    while(enumrEnumeration.hasMoreElements()) {        String name = enumrEnumeration.nextElement();        String value = context.getInitParameter(name);        System.out.println(name+" :: "+value);    }9.3 在启动tomcat服务器时候,会为每个项目创建一个servletContext对象,在这个项目里面如果通过servlet1向servletContext里面设置一个值,在这个项目里面的其他的servlet里面可以得到这个值(1)servletContext域对象:在一定的范围内,存值和取值,范围是整个web项目(2)存值:setAttribute(String name, Object object) (3)取值:getAttribute(String name) (4)首先创建servlet1,通过servlet1向servletContext里面设置一个值     其次,再创建servlet2,在servlet2获取通过servlet1设置的值

10、使用servletContext对象获取web项目中的资源

11.1 使用传统方式获取web项目中的文件(1)创建web项目,创建properties文件(2)得到要操作文件的输入流,使用相对路径    * classes/db1.properties : 相对路径    * 相对虚拟机的位置    * 在web项目中,虚拟机在tomcat启动时候,tomcat在bin里面(3)使用传统方式里面的相对路径,不能读取web项目中的文件11.2 使用servletContext对象读取web项目中的文件(1)InputStream getResourceAsStream(java.lang.String path) :得到要操作文件的输入流第一个操作:文件放到src下面= 路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat的webapps里面的具体的路径= 代码//路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat里面的具体的路径InputStream in = context.getResourceAsStream("/WEB-INF/classes/db1.properties");第二个操作:文件放到包里面= 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径= 代码//路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径InputStream in = context.getResourceAsStream("/WEB-INF/classes/com/mythmayor/read/db2.properties");第三个操作:文件放到webroot下面= 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径= 代码://路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径InputStream in = context.getResourceAsStream("/db3.properties");* 注意:当把文件放到和webroot同级的目录下面,这个文件不会部署到tomcat里面,所以使用servletContext对里面getResourceAsStream方法不能得到文件的内容(2)String getRealPath(java.lang.String path)  :得到要操作文件的完全路径(带盘符的路径)= 参数:和getResourceAsStream类似的== 第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径= 代码//使用getRealPath方法//路径:第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径String path = context.getRealPath("/db3.properties");//C:\Users\asus\Desktop\javaweb\apache-tomcat-7.0.53\webapps\db3.properties//得到要操作文件的输入流InputStream in = new FileInputStream(path);

11、使用类加载器读取文件

12.0 读取的文件的位置是 classes里面的文件12.1 得到类加载器(1)首先得到Class* 第一种方式:类名.class* 第二种方式:对象.getClass()* 第三种方式:Class.forName("包类路径")(2)使用Class得到类加载器12.2 代码//得到类的ClassClass clazz = ServletDemo1.class;//得到类加载器ClassLoader loader = clazz.getClassLoader();//得到要操作文件的输入流//文件的路径,因为读取的classes里面的文件,直接写文件的名称InputStream in = loader.getResourceAsStream("db1.properties");

12、默认的servlet

13.1 比如在浏览器的地址栏随便输入一个地址,出现404,资源找不到,这个效果是由默认的servlet实现的13.2 在tomcat的conf里面找到web.xml,有对默认servlet的配置* 如果自己创建servlet,让这个servlet在启动时候创建,<load-on-startup>大于1的值</load-on-startup>* 默认servlet的配置里面url-pattern是 /,当把自己创建的servlet的url-pattern写成/,这个servlet就会称为一个默认的servlet<servlet>    <servlet-name>default</servlet-name>    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>    <init-param>        <param-name>debug</param-name>        <param-value>0</param-value>    </init-param>    <init-param>        <param-name>listings</param-name>        <param-value>false</param-value>    </init-param>    <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>    <servlet-name>default</servlet-name>    <url-pattern>/</url-pattern> </servlet-mapping> 13.3 在默认的servlet的初始化参数里面有 listings,当把这个参数的值设置成true之后, 当直接访问web项目中文件夹时候,会把文件夹里面的所有内容显示出来

13.补充内容:

(1)修改jar包里面的模板
com.genuitec.eclipse.wizards_9.0.0.me201211011550.jar

(2)默认的servlet
404:访问的路径不存在(资源找不到);请求的资源没有找到,说明客户端错误地请求了不存在的资源。
500:代码有问题;请求资源找到了,但服务器内部出现了错误。
200:请求成功,浏览器会把响应体内容(通常是HTML)显示在浏览器中。
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了心情求的url地址。
304:用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容以及最后响应时间缓存下来。

(3)关于资源放在项目中的位置的相关问题
src中都是咱们写的代码以及配置文件.
webroot下放的都是js,css,html,jsp等资源文件
注意:WEB-INF是一个被保护的文件,所以不要在项目中把资源文件放到这个文件夹下

(4)为什么可以直接使用getServletConfig()和getServletContext()?
在写这两个方法的时候,咱们其实简写了代码.正常来说应该是在servlet中写this.getXXX(). this代表的就是当前的servlet,且这两个方法是属于GenericServlet类的方法,那么父类中的方法在咱们的子类中当然是可以直接调用的

(5)使用反射的方式加载配置文件,这个文件必须是在classes文件夹中

(6)web体系总共有四大域对象,分别是ServletContext(Application) Request Session Page。servletContext的作用域范围是整个web项目,request是一次请求,session是一次会话,page是当前页面.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信有余额绑定其他名下怎么办 银行卡绑定支付余额不对怎么办 可乐机不制冷了怎么办 被淘宝卖家威胁怎么办 征信不好想贷款怎么办 急用钱征信不好怎么办 急用钱逾期不还怎么办 急用钱借款不还怎么办 做b超按压疼痛怎么办 做b超没有尿怎么办 b超憋不到尿怎么办 做b超前没有尿意怎么办 肝胆b超前喝水了怎么办 肝胆彩超喝水了怎么办 胆囊b超喝了水怎么办 系统b超照不到怎么办 思维彩超宝宝不动怎么办 怀孕七个月胎儿缺氧怎么办 怀孕29周小孩偏小怎么办 孕29周胎儿臀位怎么办 刚怀孕有囊肿该怎么办 食杏中毒怎么办吃什么 猫吃了扁桃仁怎么办 夏天来了??点狐臭怎么办? 我有一小点狐臭怎么办 淘客网站被微信屏蔽怎么办 微信老是屏蔽网站怎么办 华帝售后没人理怎么办 新开的网店没生意怎么办 淘小二介入买家举证不全怎么办 新股申购中签后钱不够怎么办 买的东西收不到怎么办? 拼多多按错收货怎么办 团购招生做到一半不如意怎么办 网购付款后卖家没有货怎么办 淘宝退货商家不同意退款怎么办 淘宝确认收货后卖家拒绝退款怎么办 淘宝卖家不同意退款怎么办 淘宝仅退款卖家不处理怎么办 淘宝申请退款卖家不处理怎么办 快递没收到货要退款怎么办