java程序员第九课 javaweb之servlet
来源:互联网 发布:淘宝申请试用在哪里 编辑:程序博客网 时间:2024/05/16 18:02
day09
1、上节内容回顾
** tomcat安装
- 使用压缩文件,解压到没有中文和空格的目录下
- 前提条件:安装jdk,同时配置JAVA_HOME环境变量
- 启动:startup.bat
** 端口冲突问题 - 找到端口进程,结束 - 修改端口号:在server.xml中进行修改** 目录结构 - bin: 打开和关闭的文件 - conf:配置文件 - webapps:部署的项目** 动态网站的目录结构 website - WEB-INF(**) -- web.xml -- classes -- lib** 虚拟路径 -- 在server.xml <Context docBase="本地文件夹" path="访问路径"></Context> -- 找到引擎名称-主机名称- 创建一个xml文件,可以使用xml文件名称进行访问 ** <Context docBase="本地文件夹"></Context>** 网站访问的过程** http请求 - 请求行 - 请求头 - 请求体 *** 提交数据 ** Referer: 防盗链 ** User-Agent:获取浏览器信息 ** If-Modified-Since:本地缓存** http响应 - 响应行 ** 状态码 -- 200 302 304 404 500 - 响应头 ** Refresh ** Location ** Last-Modified - 响应体 ** 显示在页面的内容
2、Servlet快速入门(**)
* 什么是servlet:通过api文件查看 ,不是jdk,而是javaee文档。
** servlet是一个运行在web服务器上的java程序。可以接受和响应来自客户端的请求。
* 实现一个servlet,如何实现? ** 可以实现Servlet接口 ** 继承GenericServlet和HttpServlet ** 在tomcat里面配置,让服务器知道这个是一个servlet而不是普通的java程序。* servlet入门程序:在页面中输出内容 hello servlet! ** 步骤: 1、实现servlet - 继承GenericServlet - 在页面上输出内容: -- 使用response里面的getWriter()方法向页面输出 2、在tomcat中配置,是一个servlet - 找到web.xml - 加入一个servlet的配置 - <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> 3、部署到服务器上 4、访问servlet -直接在地址栏输入 http://127.0.0.1/servletDemo/hello
3、servlet的执行过程
** 画图分析一下过程
4、servlet的生命周期(*)
** 生命周期:从出生到死亡的全过程
** servlet的生命周期:从servlet创建到销毁这样的全过程(通过api查看)
** Servlet接口里面有五个方法,这五个方法有与生命周期相关的方法
- init方法:servlet创建时候执行(执行一次)
- service方法:所有的请求都会执行这个方法(执行多次)
- destroy方法:移除或者销毁时候执行这个方法(执行一次)
** 访问servlet时候执行init方法(只会执行一次),每次请求的时候调用service方法(执行多次),
移除或者销毁(关闭服务器)时候执行destroy方法
5、servlet开发中注意的细节问题(**)
(1)GenericServlet类的init无参数和init有参数方法
* init(ServletConfig config)
* init()
** 使用哪一个?
– init有参数的方法最终也会去执行init没有参数的方法,
* 所有我们只要使用init没有参数的方法就可以了
(2)在HttpServlet里吗有service方法和doGet doXXX方法 * service方法会根据提交方式执行不同的方法 **比如提交方式是get,执行doGet方法,比如提交方式是post,执行doPost方法*** 实际开发中,一般都是直接继承HttpServlet来实现servlet开发(3)HttpServletRequest和ServletRequest关系 HttpServletResponse和ServletResponse关系 ** 最开始时候,sun公司设计的,野心的,他们认为未来互联网发展可能不仅限于http协议, 如果增加了新的协议,这个时候都可以使用 ServletRequest和ServletResponse来实现(4)简化编程 ** 比如在doget和dopost里面实现的功能都是一样的,这个时候可以使用简化编程 ** 可以在dopost里面直接调用doget方法。比如: this.doGet(request, response);(5)servlet启动时候创建 ** 使用配置方式,在servlet标签里面进行配置 ** <load-on-startup>2</load-on-startup>;里面加上一个整数值,数字值越小表示最先创建 ** <load-on-startup>里面的值建议一定要大于1 ×× 会和默认servlet里面的值有冲突
6、servlet模板修改
** 查看文档进行修改
** 不要随便删除,可以删除里面的方法,只保留doget和dopost可以了,注释可以删除
7、url-pattern配置
有三种配置方式:
(1)完全路径匹配 /hello /aa/cc
(2)目录匹配 /bb/* /*(3)扩展名匹配 *.do *.action** 比如有这样的一个路径 http://127.0.0.1/bb/cc - /bb/* - /bb/cc** 路径匹配有一个优先级: 完全路径匹配 > 目录匹配 > 扩展名匹配- 看懂ppt上面的例子
8、开发中的路径问题
* 相对路径
** 两个文件在同一个目录下,可以直接写文件名称
- 在webroot下面创建一个html文件,url1.html
在这个页面里面访问servletDemo4,如何访问(路径如何写)?
* 直接访问servlet : http://127.0.0.1/day09/ servletDemo4 * 直接访问html: http://127.0.0.1/day09/ url1.html *** 可以直接写servlet路径 servletDemo4 *** 还有一种方式 ./servletDemo4 ** 在上层的目录下面的情况 ** 在webroot下面创建一个文件夹path1,在path1里面创建一个html文件 在这个页面里面访问servletDemo4,如何访问(路径如何写)? * 直接访问servlet : http://127.0.0.1/day09/ servletDemo4 * 直接访问页面: http://127.0.0.1/day09/ path1/path1.html ** servletDemo4在path1.html所在目录的上层目录 ../servletDemo4 ** 要调用的文件在被调用的上一级目录,../ 上层的上层 ../../ ** 每次创建不同的文件夹,调用的写法都不一样,每次都需要去找路径是什么* 绝对路径(*****) ** 两种方式 (1) 直接写ip+端口+地址 : 比如 http://127.0.0.1/day09/servletDemo4 (2)直接 工程名 +访问的路径 :比如 /day09/servletDemo4 * 直接访问servlet http://127.0.0.1 /day09/servletDemo4 * 直接访问页面 : http://127.0.0.1 /day09/ path1/path1.html ** 在不同的页面写法都一样 ,建议使用 /day09/servletDemo4这种方式来访问servlet * 客户端路径和服务器端路径(****) — 客户端路径:通过浏览器访问的路径,带项目名 /day09/servletDemo4 - 服务器端路径:在服务器内部做跳转操作,不需要带项目名 /servletDemo4 ** 重定向 和 转发 - 画图分析 重定向 和 转发 * 在实际开发中,一般使用 /day09/servletDemo4
9、ServletConfig对象(*)
(1)获取初始化参数(通过初始化参数的名称获取到值)
***得到ServletConfig对象,使用getServletConfig();** getInitParameter(java.lang.String name) - 配置初始化参数的方法 - 找到web.xml里面servlet标签 - <!-- 配置初始化参数 --> <init-param> <!-- 配置参数名称--> <param-name>username</param-name> <!-- 配置参数的值 --> <param-value>zhangsan</param-value> </init-param>(2)获取所有的初始化参数的名称** getInitParameterNames() 返回 Enumeration - Enumeration<String> enumeration = config.getInitParameterNames(); //遍历得到名称,使用getInitParameter得到值 while(enumeration.hasMoreElements()) { //得到初始参数的名称 String name = enumeration.nextElement(); //获取值 String value = config.getInitParameter(name); System.out.println("value: "+value); } - 获取所有初始参数的名称 - 遍历之后得到名称, - 使用getInitParameter根据名称得到值(3)获取ServletContext** ServletContext getServletContext() - //获取ServletContext对象ServletContext context = config.getServletContext();//获取servletContext对象,直接使用getServletContext();ServletContext context1 = getServletContext();(4)获取servlet名称** getServletName() - String servletName = config.getServletName();
10、tomcat的jdk配置
** 可以使用myeclipse中tomcat里面JDK,加入要配置的jdk
* 如果使用手动方式编译java程序,使用的肯定是本地安装的jdk
* 如果tomcat运行时候的jdk和编译使用的jdk不同,运行程序会报错
** 如何解决:使tomcat运行的jdk和编译的jdk相同,就可以解决。
11、ServletContext对象(*)
** 启动tomcat时候,tomcat里面可能有很多的项目,服务器会为每个项目创建一个唯一的对象ServletContext。
** servletContext作用:可以存取数据,用于存储全局的数据。** servletContext有一个有效范围:整个web项目;如果关闭了服务器,这个时候servletContext里面的值没有了。***** servletContext是一个域对象: - 在一定的有效范围内,可以存取值,一般来讲都是使用 setAttribute设置值,使用getAttribute获取值** 后面还会学到两个域对象 1、request 2、session** 在day09里面,使用servlet1存储一个值,在day09里面servlet2里面也可以取到servlet1存储一个值** 通过api查看ServletContext方法- setAttribute(java.lang.String name, java.lang.Object value) :可以向servletContext里面存值 ** setAttribute("name1","zhangsan"); - //创建servletContext ServletContext context = getServletContext(); //设置值 存值 context.setAttribute("msg", "itcast");- getAttribute(java.lang.String name) :从servletContext里面取值 ** getAttribute("name1"); - //创建servletContext ServletContext context = getServletContext(); //取值 String s = (String) context.getAttribute("msg");- 获取全局的初始化参数** getInitParameter(java.lang.String name): 获取全局初始化参数 *** 配置全局初始化参数 - <context-param> <param-name>username1</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>password1</param-name> <param-value>1234567890</param-value> </context-param> * 不能配置在任何一个servlet标签里面,web.xml的最上面 - //获取servletContext对象 ServletContext context = getServletContext(); //使用方法获取参数值 String username1 = context.getInitParameter("username1");** getInitParameterNames() :获取所有全局初始化参数的名称 - //获取servletContext对象 ServletContext context = getServletContext(); //执行方法 Enumeration<String> enumeration = context.getInitParameterNames(); //遍历 while(enumeration.hasMoreElements()) { //获取每一个name String name = enumeration.nextElement(); //获取值 String value = context.getInitParameter(name); System.out.println(value); }* 获取ServletContext对象** ServletContext getServletContext() 1、- //获取ServletContext对象ServletContext context = config.getServletContext();2、//获取servletContext对象,直接使用getServletContext();ServletContext context1 = getServletContext();** 操作: - 创建servlet1,向servletContext存一个值 msg itcast - 创建servlet2,从servletContext取名称是msg的值
12、案例:统计网站的访问次数
* 分析开发步骤
- 查看分析的图片
* 代码:
- 统计访问次数的代码
/
* 1、定义一个变量,放入servletContext里面
* 2、每次访问时候从servletContext里面获取到值,在这个值基础之上+1
* 3、再把+1之后的值放回servletContext里面
*
* */
//创建servletContext
ServletContext context = getServletContext();
//得到count值
int count = (Integer) context.getAttribute(“count”);
//在基础之上+1
count = count+1;
//把count值放回servletContext里面
context.setAttribute(“count”, count);
- 显示访问次数 * //获取servletContext对象 ServletContext context = getServletContext(); //从servletContext里面取count值 int count = (Integer) context.getAttribute("count");** 思考的问题: - 有购物网站,最终买的东西肯定要放到购物车,购物车是否可以使用servletContext对象存储购物信息?
13、使用servletContext读取web中的文件
(1)使用传统方式获取web项目中的文件
** 创建一个properties文件
** 使用Properties类里面 load方法 load(InputStream inStream)
** 获取具体的值 getProperty(String key)
(2)使用servletContext读取web项目中的文件(src下面的文件) ** getResourceAsStream(java.lang.String path) :得到文件流 -读取src下面的文件: //获取到servletContext对象 ServletContext context = getServletContext(); //获取文件流 getResourceAsStream InputStream in = context.getResourceAsStream("/WEB-INF/classes/dbtest.properties"); ** getResourceAsStream里面的路径: 第一个字符是/:理解为项目名 ,后面加上在tomcat里面具体的路径 - 读取包里面的文件 ** InputStream in = context. getResourceAsStream("/WEB-INF/classes/cn/itcast/webfile/dbtestfile.properties"); ** getResourceAsStream里面的路径: 第一个字符是/:理解为项目名 ,后面加上在tomcat里面具体的路径 - 读取webroot下面的文件 ** InputStream in = context. getResourceAsStream("/dbtestwebroot.properties"); ***** 如果文件和webroot是同级目录,这个时候获取不到文件内容,因为本身就没有发布到tomcat里面去 ** getRealPath(java.lang.String path) :得到文件的完整路径 带盘符路径 - String path = context.getRealPath("/dbtestwebroot.properties"); ** 第一个字符是/:理解为项目名 ,后面加上在tomcat里面具体的路径 ** I:\tomcat\apache-tomcat-7.0.53\webapps\day09\dbtestwebroot.properties
14、使用类的加载器来读文件
** 使用范围:读取classes下面的文件
- ClassLoader classLoader = this.getClass().getClassLoader();
InputStream in = classLoader.getResourceAsStream(“dbtest.properties”);
** 路径:相当与classes里面的文件,直接写文件名称
15、默认Servlet介绍
* 比如在页面随便输入一个地址,这个地址肯定是不存在的,页面返回404 或者返回500
** 这些操作都是默认servlet来实现的
* 如果想要实现一个默认的servlet,直接这样配置 <url-pattern>/</url-pattern>
- java程序员第九课 javaweb之servlet
- [Java拾遗三]JavaWeb基础之Servlet
- JavaWeb-08 (JavaWeb-Servlet基础&java web之request/respone)
- java程序员第十课 javaweb之request&response
- java程序员第十一课 javaweb之request&response
- JavaWeb 之 Servlet入门
- javaWeb之手写Servlet
- JavaWeb之Servlet详解
- (1)javaweb 之 servlet
- javaweb开发之servlet
- javaweb之Servlet
- JavaWeb之Servlet篇
- JavaWeb之Servlet
- javaWeb之Servlet开发
- JavaWeb之Servlet编程
- javaweb学习之servlet
- JavaWeb之Servlet day01
- JavaWeb之Servlet day02
- BigDecimal用法详解
- 关于Canvas的小笔记
- poj 3250 Bad Hair Day
- marvel kibana安装
- apache-tomcat-8.0.21各级文件功用
- java程序员第九课 javaweb之servlet
- iOS开发获取电池电量
- RESTful WebService入门
- MySQL语法项目练习(2)
- 1.1.0.2、在 Windows 上安装
- Linux快捷键及命令
- objective-c 中3种随机数的用法:arc4random( ) random( ) CCRANDOM_0_1( )
- Spark入门之九:机器学习简介
- javaScript弹窗