Servlet编程

相关类

HttpServlet、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse、HttpSession、Cookie`
请求头、响应头、HTTP状态码、HTTP content-type

HttpServlet

  • 继承结构
Servlet
	GenericServlet
		HttpServlet
  • 常用方法
方法 描述
init() 它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
service(ServletRequest request, ServletResponse response) 处理客户端请求
doGet(HttpServletRequest request,HttpServletResponse response) 处理get请求
doPost(HttpServletRequest request,HttpServletResponse response) 处理post请求
destroy() 只会被调用一次,在 Servlet 生命周期结束时被调用。
ServletConfig getServletConfig() 获取ServletConfig
ServletContext getServletContext() 获取ServletContext
  • 配置servlet
@WebServlet("/uploadDemo")
  <servlet> 
      
    <servlet-name>HelloFormservlet-name>
    
    <servlet-class>com.runoob.test.HelloFormservlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>HelloFormservlet-name>
    
    <url-pattern>/TomcatTest/HelloFormurl-pattern>
  servlet-mapping>

ServletConfig

ServletConfig封装了Servlet的配置信息,在Servlet初始化期间被传递。每个Servlet有且只有一个ServletCinfig对象。

方法 描述
String getServletName() 获取Servlet对象的实例名
ServletContext getServletContext() 获取Servlet上下文对象
String getInitParameter(String var1) 返回String类型名称为var1的初始化参数
Enumeration getInitParameterNames() 获取所有初始化参数的枚举

ServletContext

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个唯一的ServletContext对象这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。

方法 描述
setAttribute(String name,Object value) name是String类型,value是Object类型;往域对象里面添加数据,添加时以key-value形式添加
getAttribute(String name) 根据指定的key读取域对象里面的数据
removeAttribute(String name) 根据指定的key从域对象里面删除数据
getInitParameter(String name) 根据指定的参数名获取参数值
getInitParameterNames() 获取所有参数名称列表
getRealPath(String path) 根据相对路径获取服务器上资源的绝对路径
getResourceAsStream(String path) 根据相对路径获取服务器上资源的输入字节流
getContextPath() 获取当前工程名字
  
  <context-param>
         <param-name>param1param-name>
         <param-value>value1param-value>
  context-param>
   <context-param>
         <param-name>param2param-name>
         <param-value>value2param-value>
  context-param>

HttpServletRequest

继承自ServletRequest

方法 描述
String getHeader(String name) 以字符串形式返回指定的请求头的值。
Cookie[] getCookies() 返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。
Enumeration getAttributeNames() 返回一个枚举,包含提供给该请求可用的属性名称。
Enumeration getHeaderNames() 返回一个枚举,包含在该请求中包含的所有的头名。
Enumeration getParameterNames() 返回一个 String 对象的枚举,包含在该请求中包含的参数的名称。
HttpSession getSession() 返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。
HttpSession getSession(boolean create) 返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且create为true,则返回一个新的 session 会话。
String getRequestedSessionId() 返回由客户端指定的 session 会话 ID。
Locale getLocale() 基于 Accept-Language 头,返回客户端接受内容的首选的区域设置。
Object getAttribute(String name) 以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。
ServletInputStream getInputStream() 使用 ServletInputStream,以二进制数据形式检索请求的主体。
String getAuthType() 返回用于保护 Servlet 的身份验证方案的名称,例如,“BASIC” 或 “SSL”,如果JSP没有受到保护则返回 null。
String getCharacterEncoding() 返回请求主体中使用的字符编码的名称。
String getContentType() 返回请求主体的 MIME 类型,如果不知道类型则返回 null。
String getContextPath() 返回指示请求上下文的请求 URI 部分。
String getMethod() 返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。
String getParameter(String name) 以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。
String getPathInfo() 当请求发出时,返回与客户端发送的 URL 相关的任何额外的路径信息。
String getProtocol() 返回请求协议的名称和版本。
String getQueryString() 返回包含在路径后的请求 URL 中的查询字符串。
String getRemoteAddr() 返回发送请求的客户端的互联网协议(IP)地址。
String getRemoteHost() 返回发送请求的客户端的完全限定名称。
String getRemoteUser() 如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回 null。
String getRequestURI() 从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。
String getServletPath() 返回调用 JSP 的请求的 URL 的一部分。
String[] getParameterValues(String name) 返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。
boolean isSecure() 返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。
int getContentLength() 以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。
int getIntHeader(String name) 返回指定的请求头的值为一个 int 值。
int getServerPort() 返回接收到这个请求的端口号。
Map getParameterMap() 将参数封装成 Map 类型。

HttpServletResponse

继承自ServletResponse

方法 描述
void setHeader(String name, String value) 设置一个带有给定的名称和值的响应报头。
void setContentType(String type) 如果响应还未被提交,设置被发送到客户端的响应的内容类型。
String encodeRedirectURL(String url) 为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
String encodeURL(String url) 对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
boolean containsHeader(String name) 返回一个布尔值,指示是否已经设置已命名的响应报头。
boolean isCommitted() 返回一个布尔值,指示响应是否已经提交。
void addCookie(Cookie cookie) 把指定的 cookie 添加到响应。
void addDateHeader(String name, long date) 添加一个带有给定的名称和日期值的响应报头。
void addHeader(String name, String value) 添加一个带有给定的名称和值的响应报头。
void addIntHeader(String name, int value) 添加一个带有给定的名称和整数值的响应报头。
void flushBuffer() 强制任何在缓冲区中的内容被写入到客户端。
void reset() 清除缓冲区中存在的任何数据,包括状态码和头。
void resetBuffer() 清除响应中基础缓冲区的内容,不清除状态码和头。
void sendError(int sc) 使用指定的状态码发送错误响应到客户端,并清除缓冲区。
void sendError(int sc, String msg) 使用指定的状态发送错误响应到客户端。
void sendRedirect(String location) 使用指定的重定向位置 URL 发送临时重定向响应到客户端。
void setBufferSize(int size) 为响应主体设置首选的缓冲区大小。
void setCharacterEncoding(String charset) 设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
void setContentLength(int len) 设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
void setDateHeader(String name, long date) 设置一个带有给定的名称和日期值的响应报头。
void setIntHeader(String name, int value) 设置一个带有给定的名称和整数值的响应报头。
void setLocale(Locale loc) 如果响应还未被提交,设置响应的区域。
void setStatus(int sc) 为该响应设置状态码。

HttpSession

HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。
Servlet 还提供了 HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。通过HttpSession可以维持 Web 客户端和 Web 服务器之间的 session 会话。

// 你需要在向客户端发送任何文档内容之前调用 request.getSession()
HttpSession session = request.getSession();
方法 描述
public Object getAttribute(String name) 该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
public Enumeration getAttributeNames() 该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。
public long getCreationTime() 该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
public String getId() 该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
public long getLastAccessedTime() 该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
public int getMaxInactiveInterval() 该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
public void invalidate() 该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
public boolean isNew() p如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
public void removeAttribute(String name) 该方法将从该 session 会话移除指定名称的对象。
public void setAttribute(String name, Object value) 该方法使用指定的名称绑定一个对象到该 session 会话。
public void setMaxInactiveInterval(int interval) 该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。
package model;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/sessionTrack")
public class SessionTrack extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request;
        HttpServletResponse response;
        try {
            request = (HttpServletRequest) req;
            response = (HttpServletResponse) res;

        } catch (ClassCastException var6) {
            throw new ServletException("non-HTTP request or response");
        }

        // 如果不存在 session 会话,则创建一个 session 对象
        HttpSession session = request.getSession(true);

        // 获取 session 创建时间
        Date createTime = new Date(session.getCreationTime());

        // 获取该网页的最后一次访问时间
        Date lastAccessTime = new Date(session.getLastAccessedTime());

        //设置日期输出的格式
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        String title = "Servlet Session 实例";
        Integer visitCount = 0;
        String visitCountKey = "visitCount";
        String userIDKey = "userID";
        String userID = "Runoob";

        if(session.getAttribute(visitCountKey) == null) {
            session.setAttribute(visitCountKey, 0);
        }

        // 检查网页上是否有新的访问者
        if (session.isNew()){
            session.setAttribute(userIDKey, userID);
        } else {
            visitCount = (Integer)session.getAttribute(visitCountKey);
            visitCount = visitCount + 1;
            userID = (String)session.getAttribute(userIDKey);
        }
        session.setAttribute(visitCountKey,  visitCount);

        /*-------------------------------------------------------------------------------*/
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String docType = "\n";
        out.println(docType +
                "\n" +
                ""</span> <span class="token operator">+</span> title <span class="token operator">+</span> <span class="token string">"\n" +
                "\n" +
                "

" + title + "

\n"
+ "

Session 信息

\n"
+ "\n"+"\n"+" \n"+"\n"+" \n"+" \n"+"\n"+" \n"+" \n"+"\n"+" \n"+" \n"+"\n"+" \n"+" \n"+"\n"+" \n"+" \n"+"
Session 信息
id " + session.getId() + "
创建时间 " + df.format(createTime) + "
最后访问时间 " + df.format(lastAccessTime) + "
用户 ID " + userID + "
访问统计: " + visitCount + "
\n"
+ ""); } }

Cookie

Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。

方法 描述
public void setDomain(String pattern) 该方法设置 cookie 适用的域,例如 runoob.com。
public String getDomain() 该方法获取 cookie 适用的域,例如 runoob.com。
public void setMaxAge(int expiry) 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
public int getMaxAge() 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
public String getName() 该方法返回 cookie 的名称。名称在创建后不能改变。
public void setValue(String newValue) 该方法设置与 cookie 关联的值。
public String getValue() 该方法获取与 cookie 关联的值。
public void setPath(String uri) 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
public String getPath() 该方法获取 cookie 适用的路径。
public void setSecure(boolean flag) 该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
public void setComment(String purpose) 设置cookie的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
public String getComment() 获取 cookie 的注释,如果 cookie 没有注释则返回 null。
Cookie cookie = new Cookie("name", "UTF-8"); // 中文转码
cookie.setMaxAge(60*60*24); 
response.addCookie(cookie);

你可能感兴趣的:(Java)