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是当前页面.
- javaweb
- JavaWeb
- JavaWeb
- javaweb
- javaWeb
- JAVAweb
- 【JavaWeb】
- javaweb
- javaweb
- javaweb
- javaweb
- javaWeb
- javaweb
- javaweb
- JavaWEB
- JavaWeb
- javaweb
- JavaWeb
- 魔术
- 公众号丶服务号丶订阅号三者间的区别
- 图书馆管理系统课程设计
- SKB包的接收,从网卡驱动到TCP层的处理流程
- Matlab自带排序函数sort用法
- JavaWeb
- H5响应式自助建站_成功之选!
- Linux thinkphp5 多站点配置
- 聊聊我的第一次合伙创业!致奋斗路上的码农们
- 奇怪的Java题:为什么1000 == 1000返回为False,而100 == 100会返回为True?
- SAP HANA如何在存储过程中使用自定义的table type
- 大数据架构简述(三):流处理、批处理、交互式查询
- Android 4.4及以上版本写入外置SD卡问题
- centos网络配置实例