本帖最后由 小石姐姐 于 2018-5-23 16:51 编辑
servelet
1.什么是Servlet:
* 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
* Servlet就是SUN公司提供的一个动态网页开发技术.
2.Servlet的作用:
* 用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
3.Servlet的使用:
*1. 编写一个类实现Servlet接口.
*2. 将编写的这个类配置到服务器中.
4.Servlet接口的使用:
* 创建一个类,实现Servlet接口
* 实现它所有的方法
* 重写它的service(ServlerRequest req,ServletResponse)方法
在方法内写入要执行的代码
* 在web.xml文件中配置实现Servlet接口类的虚拟路径名
4.1例:
<!-- 配置Servlet -->
<servlet>
<!-- Servlet的名称 -->
<servlet-name>test1</servlet-name>
<!-- SErvlet的全路径 -->
<servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class>
</servlet>
<!-- Servlet的映射 -->
<servlet-mapping>
<!-- Servlet的名称 -->
<servlet-name>test1</servlet-name>
<!-- Servlet的访问路径 -->
<url-pattern>/ServletDemo1</url-pattern>
</servlet-mapping>
4.2 配置好后该Servlet接口实现类的访问路径为:
http://ip:port/工程名/url-pattern值
5.Servlet的相关类
5.1 ServletRequest 接口
* 定义将客户端请求信息提供给某个 servlet 的对象。
servlet 容器创建 ServletRequest 对象,并将该对象作为参数传递给该 servlet
的 service 方法。
ServletRequest 对象提供包括参数名称、参数值、属性和输入流的数据。
扩展 ServletRequest 的接口可提供其他特定于协议的数据;
** 例如: javax.servlet.http.HttpServletRequest 提供的 HTTP 数据
*常用方法
* String getParameter(String name);
---用于接收一个名称对应一个值的数据.
* String[] getParameterValues(String name);
---用于接收一个名称对应多个值的数据.
* Map getParameterMap();
---用于接收表单中的所有的数据,Map的key是表
单提交的参数名称,Map的value是提交参数的值.
* Enumeration getParameterNames()
---用于获取表单中提交的所有的参数的名称.
5.2 HttpServletResponse 接口
* 定义辅助 servlet 将响应发送到客户端的对象。
servlet 容器创建 ServletResponse 对象,
并将它作为参数传递给 servlet 的 service 方法。
*常用方法:
* addHeader(String name,String value); --- 针对一个key对应多个value的响应头.
* addDateHeader(String name,long date);
* addIntHeader(String name,int value);
** 使用: add开头这种,可以对头信息的值后边追加值
例: 头信息为 : xxx:aaa
执行完addHeader("xxx","bbb"); -->结果: xxx:aaa,bbb
* setHeader(String name,String value); --- 针对一个key对应一个value的响应头.
* setDateHeader(String name,long date);
* setIntHeader(String name,int value);
** 使用: set开头这种,可以对头信息的值进行修改
例: 头信息为 : xxx:aaa
执行完setHeader("xxx","bbb"); -->结果: xxx:bbb
5.3.ServletContext 对象
5.3.1概述:
* ServletContext对象存取数据,存的数据都是有一定的作用的范围的.
这种对象称为是域对象.(有三个域)
* 服务器启动时就会为该工程创建一个ServletConnection对象
并且就只创建一个
* 它的作用域为整个web工程
* 它的使用:
在任意一个Servlet的实现类中
this.getServletConntext().setAttribute("count",count);
//解释:
* this.getServletConntext()获取ServletContext对象
* 然后再用对象调用它的方法
5.3.2ServletContext的对象常用方法
* void setAttribute(String name,Object object)
--用来向ServletContext中存入数据.
* Object getAttribute(String name)
--用来从ServletContext中获取数据.
* void removeAttribute(String name)
--用来从ServletContext中移除数据.
5.4.ServletConfig 接口
* 作用:了解.获得Servlet的配置信息
* 方法:
* String getServletName();
---获得Servlet在web.xml中配置的name的值.
例: 获取的是 servlet-name 标签下的UserServlet
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.a_servlet.UserServlet</servlet-class>
* String getInitParameter(String name);
---获得Servlet的初始化参数的值.
* Enumeration getInitParameterNames();
---获得所有Servlet的初始化参数的名称.
* ServletContext getServletContext()
---获取一个ServletConntext对象
5.5.ServletContext 接口
* 作用:
* 1.用来获得全局初始化参数.
* 2.用来获得文件的MIME的类型.(一般在上传下载时使用)
* 3.作为域对象存取数据.
* ServletContext是一个域对象.
* 作用范围:整个web工程.
* 创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.(一个web项目中只有一个ServletContext对象)
* 销毁:服务器关闭的时候,或者项目从服务器中移除的时候.
* 4.用来读取web项目下的文件.??
5.6.ServletRequest 接口
5.7.ServletResponse 接口
5.8.HttpServlet 类
* 提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。
* HttpServlet 的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
** doGet,如果 servlet 支持 HTTP GET 请求
** doPost,用于 HTTP POST 请求
** doPut,用于 HTTP PUT 请求
** doDelete,用于 HTTP DELETE 请求
** init 和 destroy,用于管理 servlet 的生命周期内保存的资源
** getServletInfo,servlet 使用它提供有关其自身的信息
5.9.GenericServlet 类
* 定义一般的、与协议无关的 servlet;
6.servlet 相关类的获取方法
* ServletConfig 可以通过Servlet 和 HttpServlet 获取
* ServletContext 可以通过HttpServlet获取
* ServletRequest / ServletResponse 都是由Servlet容器创建
7.Servlet的实现的关系
Servlet :接口
|
GenericServlet :通用的Servlet
|
HttpServlet :HttpServlet
* 编写一个类继承HttpServlet,重写doGet和doPost方法.
* 在web.xml中配置url-pattern
8.Servlet的相关配置
8.1启动时创建Servlet
* Servlet默认是在第一次访问的时候创建的.
现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置:
*在web.xml中在<servlet></servlet>标签中配置:
* <load-on-startup>2</load-on-startup>
--- 传入正整数,整数越小,被创建的优先级就越高.
* 在tomcat中1已经被使用,因此只能从2开始使用
例:
<servlet>
<servlet-name>CountServlet</servlet-name>
<servlet-class>com.a_servlet.CountServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
9.web.xml配置文件 的标签解释
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.a_servlet.UserServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>pingguo</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
* <init-param> 用于写入一些初始化信息
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
* <load-on-startup>2</load-on-startup>
:自动加载启动,在服务器启动时就会加载
10.
* url-pattern配置方式共有三种:
1.完全路径匹配 :以 / 开始
例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目录匹配 :以 / 开始 需要以 * 结束.
例如: ' /* ' , '/aaa/*' , '/aaa/bbb/*'
3.扩展名匹配 :不能以 / 开始 以 * 开始的.
例如: *.do , *.action
***** 错误的写法 : ' /*.do '
* 三种路径匹配的优先级:
***** 完全路径匹配 > 目录匹配 > 扩展名匹配
* 设置优先级的目的:
访问规则保证了一次请求只有一次响应
11.web项目开发中的路径
11.1相对路径:都是需要找位置相对关系.不能以 / 开始的.
* ./ 当前路径 ../上一级目录
* 使用相对路径访问:
* http://localhost:8080/day09/demo4-url/demo1.html
* http://localhost:8080/day09/ServletDemo6
11.2绝对路径:不需要找位置相对关系. 以 / 开始的.
* 绝对路径中分为客户端路径和服务器端路径:
* 客户端路径一定要加工程名. /day09/ServletDemo6
* 服务器端路径不需要加工程名. /ServletDemo6
|
|