web.xml文件配置
<servlet> <servlet-name>Servlet类名称</servlet-name> <servlet-class>Servlet所在位置</servlet-class> <load-on-startup>优先级</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Servlet类名称</servlet-name> <url-pattern>映射地址</url-pattern> </servlet-mapping>
-
<load-on-startup>num</load-on-startup>
- WEB应用程序在启动时就会装载并创建Servlet的实例对象,以及调用Servlet实例对象的init()方法应用:为WEB应用写一个InitServlet,这个servlet为启动时装载num为优先级,数字小的优先级高(范围:0-无穷)
Servlet API
HttpServletRequest
HttpServletRequest 接口的使用和 JSP 内置对象的 request 对象非常类似。request 对象其实就是 HttpServletRequest
接口实现类的一个实例,不过其实例化过程是自动的无须自定义的。
在 Servlet 中 request 对象也是由容器初始化的,如果要在程序中使用 request 对象,直接使用就是,无需手动初始
化。
getRequestDispatcher(String path) | 构建一个转发对象,参数值是跳转的地址(下面有演示) |
getHeaderNames() | 获取所有请求头的名字 (下面有演示) |
getHeader(String name) | 获取对应请求头名字的值 |
方法 | 说明 |
public String getContextPath() | 返回请求的上下文路径,此路径以“/”开头(即返回项目名称) |
public Cookie[] getCookies() | 返回请求中发送的所有 cookie对象,返回值为 cookie 数组 |
public String getMethod() | 返回请求所使用的 HTTP 类型,如 get、post 等 |
public String getQueryString() | 返回请求中参数的字符串形式,如请求 MyServlet?username=timo,则返回 username=timo |
public String getRequestURI() | 返回主机名到请求参数之间部分的字符串形式(不带IP) |
public StringBuffer getRequestURL() | 返回请求的 URL,此 URL 中不包含请求的参数。注意此方法返回的数据类型为 |
public String getServletPath() | 返回URI中的Servlet路径(url-pattern中的值),不包含请求中的参数信息 |
public HttpSession getSession() | 返回与请求关联的 HttpSession对象 |
setAttribute(String name, Object o) | 设置属性值 |
getAttribute(String name) | 获取属性值(需要根据设置的属性进行类型强转) |
setCharacterEncoding(String env) | 设置字符编码集 |
getCharacterEncoding() | 获取字符编码集 |
getParameter(String name) | 获取参数的值,即获取?user=timo&age=26的值 |
getParameterValues(String name) | 获取参数的多个值,即获取?user=timo&name=jinxin中name的多个值 |
getParameterNames() | 获取请求参数名字的方法,即获取?user=timo&age=26中的name跟age (下面有演示) |
getRemoteAddr() | 获取发送请求者的IP |
getRemoteHost() | 获取请求者的主机名称,如果不能解析,直接返回IP |
1 // getRequestDispatcher()用法 2 RequestDispatcher d = request.getRequestDispatcher("/index.jsp"); // 获取转发对象 3 d.forword(request, response); // 将request response传到下一个页面 4 5 // getHeaderNames()跟getHeader(String name)联用 6 Enumeration<String> e = request.getHeaderNames(); 7 while(e.hasMoreElements()){ 8 String name = e.nextElement(); 9 System.out.print(name + ": "); 10 String names = request.getHeader(name); 11 System.out.println(names); 12 } 13 14 // getParameterNames()跟getParameter(String name)联用 15 Enumeration<String> e1 = request.getParameterNames(); 16 while(e1.hasMoreElements()){ 17 String np = e1.nextElement(); 18 System.out.println(np + ":"); 19 String namer = request.getParameter(np); 20 System.out.println(namer); 21 } 22
HttpServletResponse
HttpServletResponse 接口的使用和 JSP 内置对象的 response 对象非常类似。response 对象其实就是
HttpServletResponse 接口的实现类一个实例,不过其实例化过程是自动的无须自定义的。
在 Servlet 中 response 对象也是由容器初始化的,如果要在程序中使用 response 对象,直接使用就是,无需手动初
始化。
方法 | 说明 |
public void addCookie(Cookie cookie) | 向客户端写入 cookie 信息 |
public void sendError(int sc) | 发送一个错误状态码为 sc的错误响应到客户端 |
public void sendError(int sc, String msg) | 发送一个包含错误状态码及错误信息的响应到客户端,参数 sc为错误状态码,参数 msg |
public void sendRedirect(String location) | 使用客户端重定向到新的 URL,参数 location 为新的地址 |
setContentType(String type) | 设置内容类型 |
setHeader(String name,String value) | 设置响应头信息 |
setStatus | 设置响应状态码 |
1 /** 2 * 关于setHeader()的几个常见用法 3 */ 4 5 // 1秒钟刷新一次页面 6 response.setHeader("refresh", "1"); 7 8 // 2秒钟跳转到别的页面 9 response.setHeader("refresh", "2;URL=otherpage.jsp"); 10 11 // 设置无缓存 12 response.setHeader("expires", 0); 13 response.setHeader("cache-control", "no-cache"); 14 response.setHeader("pragma", "no-cache"); 15 16 // 设置压缩数据 17 response.setHeader("content-encoding", "gzip");
Servlet中的几个接口
ServletContext接口
ServletContext 定义了一组方法,Servlet 可以使用这些方法和它的 Servlet 容器进行通讯。WEB 容器在启动时,会为每个 web 应用程序都创建一个对应的 ServletContext 对象,这个对象就代表当前 web 应用。
ServletContext 对象被包含在 ServletConfig 对象中,开发人员在编写 servlet 时,可以通过ServletConfig.getServletContext 方法获得对 ServletContext 对象的引用。
由于一个 WEB 应用中的所有 Servlet 共享同一个 ServletContext 对象,因此 Servlet 对象之间可以通过 ServletContext 对象来实现通讯。ServletContext 对象通常也被称之为 context 域对象。
ServletContext 接口的使用和 JSP 内置对象的 application 对象非常类似。application 对象其实就是ServletContext 接口实现类的一个实例,不过其实例化过程是自动的无须自定义的。
在 Servlet 中 application 对象必须通过 HttpServlet 接口的 getServletContext()方法获得。将 ServletContext 作为域对象,实现多个 Servlet 对象共享数据
So,ServletContext最大的作用就是:可以实现各个Servlet之间的通信!!!!
获取ServletContext对象:
ServletContext con = request.getServletContext();
ServletContext con = this.getServletConfig.getServletContext();
ServletContext con = this.getServletContext();
方法 | 说明 |
void setAttribute(String name,Object obj) | 设置共享属性 |
Object getAttribute(String name) | 读取共享属性 |
void removeAttribute(String name) | 移除共享属性 |
ServletContext getContext(String uri) | 获取指定 uri的上下文对象 |
String getContextPath() | 返回 web程序的上下文路径 |
String getInitParameter(String param) | 获取上下文初始化参数,即获取web.xml中的<context-param>标签中的值 |
String getRealPath(String path) | 返回资源在服务器上的真实路径,例如C:\Program Files\... |
RequestDispatcher getRequestDispatcher(String path) | 返回一个包装了路径信息的 Dispatcher对象 |
1 /** 2 * 关于getInitParameter()用法 3 */ 4 5 // web.xml文件中 6 <context-param> 7 <param-name>username</param-name> 8 <param-value>timo</param-value> 9 </context-param> 10 <context-param> 11 <param-name>age</param-name> 12 <param-value>26</param-value> 13 </context-param> 14 15 // Servlet中获取参数 16 ServletContext con = request.getServletContext(); 17 con.getInitParameter("username"); 18 con.getInitParameter("age");
ServletConfig接口
在 servlet 的配置项中,可以使用一个或多个<init-param>标签为当前 servlet 配置一些初始化参数。
web 容器在创建 servlet 实例对象时,会自动将这些初始化参数封装到一个 ServletConfig 对象中,并在调用 servlet 的 init 方法时,将 ServletConfig 对象作为参数传递给 servlet。
程序员通过操作 ServletConfig 对象就可以得到当前 servlet 的初始化参数信息
So,ServletConfig的作用是获取web.xml文件中的初始化参数
获取ServletConfig对象:
ServletConfig config = this.getServletConfig();
方法 | 说明 |
public String getInitParameter(String name) | 此方法返回 String 类型名称为 name 的初始化参数值 |
public Enumeration getInitParameterNames() | 获取所有初始化参数名的枚举集合 |
public ServletContext getServletContext() | 用于获取 ServletContext对象 |
public String getServletName() | 返回 Servlet 对象的实例名,即获取类名 |
1 /** 2 * 关于ServletConfig的用法 3 */ 4 5 // web.xml中 6 <init-param> 7 <param-name>username</param-name> 8 <param-value>timo</param-value> 9 </init-param> 10 <init-param> 11 <param-name>age</param-name> 12 <param-value>26</param-value> 13 </init-param> 14 15 // Servlet中获取 16 ServletConfig config = this.getServletConfig(); 17 // 通过getInitParameter()方法获取 18 String user = config.getInitParameter("username"); 19 20 // 通过getInitParameterNames()获取所有的参数名 21 Enumeration<String> e = config.getInitParameterNames(); 22 while(e.hasMoreElements()){ 23 String n = e.nextElement(); 24 String v = config.getInitParameter(n); 25 System.out.println(v); 26 }
RequestDispatcher接口
要完成请求转发,那么就需要使用 javax.servlet. RequestDispatcher 接口 RequestDispatcher 对象由 Servlet 容器创建
- 该对象封装了一个由路径标示的服务器资源
- 利用该对象,可以把请求转发给其他的 Servlet 或者 JSP 页面
获取RequestDispatcher对象:
ServletRequest接口提供的方法
---- getRequestDispatcher(String path); 该方法中参数路径可以以”/”开始,也可以不以”/”开始
ServletContext接口提供的方法
---- getRequestDispatcher(String path); 该方法中参数路径必须以”/”开始,表示相对于上下文根路径
---- getNamedDispatcher(String name); 以部署描述符(web.xml)中的 Servlet 的名字作为参数,即要跳转的Servlet类名
方法 | 说明 |
void forward(ServletRequest req, |
将请求从一个 Servlet 传递给另外一个 Servlet、JSP、HTML |
void include(ServletRequest req, |
用于在响应中包含其他资源(Servlet/JSP/HTML)的内容 |
几种跳转
一、通过request.getRequestDispatcher()跳转\
1 RequestDispatcher r = request.getRequestDispatcher("/index.jsp"); 2 r.foeword(request, response);
二、通过response.sendRedierct()跳转
三、通过response.setHeader()跳转
1 response.setHeader("refresh', "2;URL=index.jsp"); // 两秒之后跳转到index.jsp页面
四、通过RequestDispatcher对象实现servlet与Servlet之间的跳转
1 ServletContext sc = request.getServletContext(); 2 RequestDispatcher rd = sc.getNamedDispatcher("要跳转的Servlet类名"); 3 rd.forword(request, response);
免xml.web配置
在Servlet中注解配置
@WebServlet("/server/ServletProject")
or
@WebServlet(urlPatterns="/session", name="session", loadOnStartup=1)
替代了web.xml文件中的一堆标签,不再需要写
<server>
<server-name></server-name>
<server-class></server-class>
</server>
<server-mapping>
<server-name></server-name>
<url=pattern></url=pattern>
</server-mapping>
这一堆冗长的代码