Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置

  Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的注解支持。

@WebServlet

@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 vlaue 或者 urlPatterns 通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值):

表 1. @WebServlet 主要属性列表
属性名 类型 描述
name String 指定 Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
value String[] 该属性等价于 urlPatterns 属性。两个属性不能同时使用。
urlPatterns String[] 指定一组 Servlet 的 URL 匹配模式。等价于 <url-pattern> 标签。
loadOnStartup int 指定 Servlet 的加载顺序,等价于 <load-on-startup> 标签。
initParams WebInitParam[] 指定一组 Servlet 初始化参数,等价于 <init-param> 标签。
asyncSupported boolean 声明 Servlet 是否支持异步操作模式,等价于 <async-supported> 标签。
description String 该 Servlet 的描述信息,等价于 <description> 标签。
displayName String 该 Servlet 的显示名,通常配合工具使用,等价于 <display-name> 标签。

下面是一个简单的示例:


1

2

3

4

5

@WebServlet(urlPatterns = {"/simple"}, asyncSupported = true,

loadOnStartup = -1, name = "SimpleServlet", displayName = "ss",

initParams = {@WebInitParam(name = "username", value = "tom")}

)

public class SimpleServlet extends HttpServlet{ … }

如此配置之后,就可以不必在 web.xml 中配置相应的 <servlet> 和 <servlet-mapping> 元素了,容器会在部署时根据指定的属性将该类发布为 Servlet。它的等价的 web.xml 配置形式如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<servlet>

    <display-name>ss</display-name>

    <servlet-name>SimpleServlet</servlet-name>

    <servlet-class>footmark.servlet.SimpleServlet</servlet-class>

    <load-on-startup>-1</load-on-startup>

    <async-supported>true</async-supported>

    <init-param>

        <param-name>username</param-name>

        <param-value>tom</param-value>

    </init-param>

</servlet>

<servlet-mapping>

    <servlet-name>SimpleServlet</servlet-name>

    <url-pattern>/simple</url-pattern>

</servlet-mapping>

@WebInitParam

该注解通常不单独使用,而是配合 @WebServlet 或者 @WebFilter 使用。它的作用是为 Servlet 或者过滤器指定初始化参数,这等价于 web.xml 中 <servlet> 和 <filter> 的 <init-param> 子标签。@WebInitParam 具有下表给出的一些常用属性:

表 2. @WebInitParam 的常用属性
属性名 类型 是否可选 描述
name String 指定参数的名字,等价于 <param-name>。
value String 指定参数的值,等价于 <param-value>。
description String 关于参数的描述,等价于 <description>。

@WebFilter

@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 ):

表 3. @WebFilter 的常用属性
属性名 类型 描述
filterName String 指定过滤器的 name 属性,等价于 <filter-name>
value String[] 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
urlPatterns String[] 指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。
servletNames String[] 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。
dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括:
ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams WebInitParam[] 指定一组过滤器初始化参数,等价于 <init-param> 标签。
asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。
description String 该过滤器的描述信息,等价于 <description> 标签。
displayName String 该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。

下面是一个简单的示例:


1

2

@WebFilter(servletNames = {"SimpleServlet"},filterName="SimpleFilter")

public class LessThanSixFilter implements Filter{...}

如此配置之后,就可以不必在 web.xml 中配置相应的 <filter> 和 <filter-mapping> 元素了,容器会在部署时根据指定的属性将该类发布为过滤器。它等价的 web.xml 中的配置形式为:


1

2

3

4

5

6

7

8

<filter>

    <filter-name>SimpleFilter</filter-name>

    <filter-class>xxx</filter-class>

</filter>

<filter-mapping>

    <filter-name>SimpleFilter</filter-name>

    <servlet-name>SimpleServlet</servlet-name>

</filter-mapping>

@WebListener

该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:

  • ServletContextListener
  • ServletContextAttributeListener
  • ServletRequestListener
  • ServletRequestAttributeListener
  • HttpSessionListener
  • HttpSessionAttributeListener

该注解使用非常简单,其属性如下:

表 4. @WebListener 的常用属性
属性名 类型 是否可选 描述
value String 该监听器的描述信息。

一个简单示例如下:


1

2

@WebListener("This is only a demo listener")

public class SimpleListener implements ServletContextListener{...}

如此,则不需要在 web.xml 中配置 <listener> 标签了。它等价的 web.xml 中的配置形式如下:


1

2

3

<listener>

    <listener-class>footmark.servlet.SimpleListener</listener-class>

</listener>

@MultipartConfig

该注解主要是为了辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持。该注解标注在 Servlet 上面,以表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data。另外,它还提供了若干属性用于简化对上传文件的处理。具体如下:

表 5. @MultipartConfig 的常用属性
属性名 类型 是否可选 描述
fileSizeThreshold int 当数据量大于该值时,内容将被写入文件。
location String 存放生成的文件地址。
maxFileSize long 允许上传的文件最大值。默认值为 -1,表示没有限制。
maxRequestSize long 针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制。

以上引用于https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

Servlet核心接口:

  在Servlet体系结构中,除了用于实现Servlet的Servlet接口,GenericServlet类和HttpServlet类外,还有一些辅助Servlet获取相关资源信息的重要接口,了解这些接口的作用并熟练掌握这些接口的常用方法是使用Servlet进行Web应用开发的基础,下面我将介绍以下几种接口:

1.ServletConfig接口:用于获取Servlet初始化参数和ServletContext对象;

 1 //
 2 // Source code recreated from a .class file by IntelliJ IDEA
 3 // (powered by Fernflower decompiler)
 4 //
 5
 6 package javax.servlet;
 7
 8 import java.util.Enumeration;
 9
10 public interface ServletConfig {
11     String getServletName();
12
13     ServletContext getServletContext();
14
15     String getInitParameter(String var1);
16
17     Enumeration<String> getInitParameterNames();
18 }

ServletConfig接口的主要方法:

getInitParameter(String param); 根据给定的初始化参数名称,返回参数值,若参数不存在,返回null

getInitParameterNames():返回一个枚举集合对象,里面包含了所有的初始化参数名称

getServletContext():返回当前ServletContext()对象

getServletName():返回当前Servlet的名字,即@WebServlet的name属性值。如果没有配置这个属性,则返回Servlet类的全限定名(绝对路径)

2.ServletContext接口:

  1 //
  2 // Source code recreated from a .class file by IntelliJ IDEA
  3 // (powered by Fernflower decompiler)
  4 //
  5
  6 package javax.servlet;
  7
  8 import java.io.InputStream;
  9 import java.net.MalformedURLException;
 10 import java.net.URL;
 11 import java.util.Enumeration;
 12 import java.util.EventListener;
 13 import java.util.Map;
 14 import java.util.Set;
 15 import javax.servlet.ServletRegistration.Dynamic;
 16 import javax.servlet.descriptor.JspConfigDescriptor;
 17
 18 public interface ServletContext {
 19     String TEMPDIR = "javax.servlet.context.tempdir";
 20     String ORDERED_LIBS = "javax.servlet.context.orderedLibs";
 21
 22     String getContextPath();
 23
 24     ServletContext getContext(String var1);
 25
 26     int getMajorVersion();
 27
 28     int getMinorVersion();
 29
 30     int getEffectiveMajorVersion();
 31
 32     int getEffectiveMinorVersion();
 33
 34     String getMimeType(String var1);
 35
 36     Set<String> getResourcePaths(String var1);
 37
 38     URL getResource(String var1) throws MalformedURLException;
 39
 40     InputStream getResourceAsStream(String var1);
 41
 42     RequestDispatcher getRequestDispatcher(String var1);
 43
 44     RequestDispatcher getNamedDispatcher(String var1);
 45
 46     /** @deprecated */
 47     @Deprecated
 48     Servlet getServlet(String var1) throws ServletException;
 49
 50     /** @deprecated */
 51     @Deprecated
 52     Enumeration<Servlet> getServlets();
 53
 54     /** @deprecated */
 55     @Deprecated
 56     Enumeration<String> getServletNames();
 57
 58     void log(String var1);
 59
 60     /** @deprecated */
 61     @Deprecated
 62     void log(Exception var1, String var2);
 63
 64     void log(String var1, Throwable var2);
 65
 66     String getRealPath(String var1);
 67
 68     String getServerInfo();
 69
 70     String getInitParameter(String var1);
 71
 72     Enumeration<String> getInitParameterNames();
 73
 74     boolean setInitParameter(String var1, String var2);
 75
 76     Object getAttribute(String var1);
 77
 78     Enumeration<String> getAttributeNames();
 79
 80     void setAttribute(String var1, Object var2);
 81
 82     void removeAttribute(String var1);
 83
 84     String getServletContextName();
 85
 86     Dynamic addServlet(String var1, String var2);
 87
 88     Dynamic addServlet(String var1, Servlet var2);
 89
 90     Dynamic addServlet(String var1, Class<? extends Servlet> var2);
 91
 92     Dynamic addJspFile(String var1, String var2);
 93
 94     <T extends Servlet> T createServlet(Class<T> var1) throws ServletException;
 95
 96     ServletRegistration getServletRegistration(String var1);
 97
 98     Map<String, ? extends ServletRegistration> getServletRegistrations();
 99
100     javax.servlet.FilterRegistration.Dynamic addFilter(String var1, String var2);
101
102     javax.servlet.FilterRegistration.Dynamic addFilter(String var1, Filter var2);
103
104     javax.servlet.FilterRegistration.Dynamic addFilter(String var1, Class<? extends Filter> var2);
105
106     <T extends Filter> T createFilter(Class<T> var1) throws ServletException;
107
108     FilterRegistration getFilterRegistration(String var1);
109
110     Map<String, ? extends FilterRegistration> getFilterRegistrations();
111
112     SessionCookieConfig getSessionCookieConfig();
113
114     void setSessionTrackingModes(Set<SessionTrackingMode> var1);
115
116     Set<SessionTrackingMode> getDefaultSessionTrackingModes();
117
118     Set<SessionTrackingMode> getEffectiveSessionTrackingModes();
119
120     void addListener(String var1);
121
122     <T extends EventListener> void addListener(T var1);
123
124     void addListener(Class<? extends EventListener> var1);
125
126     <T extends EventListener> T createListener(Class<T> var1) throws ServletException;
127
128     JspConfigDescriptor getJspConfigDescriptor();
129
130     ClassLoader getClassLoader();
131
132     void declareRoles(String... var1);
133
134     String getVirtualServerName();
135
136     int getSessionTimeout();
137
138     void setSessionTimeout(int var1);
139
140     String getRequestCharacterEncoding();
141
142     void setRequestCharacterEncoding(String var1);
143
144     String getResponseCharacterEncoding();
145
146     void setResponseCharacterEncoding(String var1);
147 }

  ServletContext也成为Servlet上下文,代表当前Servlet运行环境,是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个Web应用时,会为该应用创建一个唯一的ServletContext对象供该应用中所有的Servlet对象共享,Servlet对象可以通过ServletContext对象来访问容器的各种资源。

  获取ServletContext对象可以通过ServletConfig接口或者Generic抽象类中的getServletContext()方法

  ServletContext接口中提供了以下几种类型的方法:

    获取应用范围的初始化参数的方法:

      getInitParameter(String param); 根据给定的初始化参数名称,返回参数值,若参数不存在,返回null

      getInitParameterNames():返回一个枚举集合对象,里面包含了所有的初始化参数名称

    存取应用范围域属性的方法:

      setAttribute(String name,Object obj)把一个对象和一个属性名以key+value的形式绑定并存放在ServletContext中

      getAttribute(String name) 返回用上一方法中存的对象,根据其对应的属性名

      getAttributeNames():返回一个枚举集合对象,该对象包含了所有存放在ServletContext中的属性名

      removeAttribute(String name):同getAttribute()方法相反,删除一个匹配的对象

    获取当前Web应用信息的方法:

      getContextPath():返回当前web应用的根路径

      getServletContextName():返回web应用的名字,即<web-app>中<display-name>元素的值

      getRequestDispatcher(String path):返回一个用于其他web组件转发请求的RequestDispatcher对象

      getContext(Srting uripath):根据参数制定的URL返回当前Servlet容器中其他web应用的ServletContext对象,URL必须时以“/”开头的绝对路径

    获取当前容器信息和输出日志的方法:

      getServletInfo():返回Web容器的名字和版本

      getMajorVersion():返回Web容器支持的Servlet API主版本号

      getMinorVersion():返回Web容器支持的Servlet API次版本号

      log(String msg):用于记录一般的日志

      log(String msg throwable):用于记录带异常类型的日志

    获取服务器端文件资源的方法:

      getResourceAsStream(String path):返回一个读取参数指定的文件的输入流,参数路径必须以“/”开头

      getResouce(String path):返回由path指定的的资源路径对应的一个URL对象,参数路径必须以“/”开头

      getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径

      getMimeType(String path):返回参数指定的文件的MIME类型

3.HttpServletRequest接口

  1 //
  2 // Source code recreated from a .class file by IntelliJ IDEA
  3 // (powered by Fernflower decompiler)
  4 //
  5
  6 package javax.servlet.http;
  7
  8 import java.io.IOException;
  9 import java.security.Principal;
 10 import java.util.Collection;
 11 import java.util.Collections;
 12 import java.util.Enumeration;
 13 import java.util.Map;
 14 import javax.servlet.ServletException;
 15 import javax.servlet.ServletRequest;
 16
 17 public interface HttpServletRequest extends ServletRequest {
 18     String BASIC_AUTH = "BASIC";
 19     String FORM_AUTH = "FORM";
 20     String CLIENT_CERT_AUTH = "CLIENT_CERT";
 21     String DIGEST_AUTH = "DIGEST";
 22
 23     String getAuthType();
 24
 25     Cookie[] getCookies();
 26
 27     long getDateHeader(String var1);
 28
 29     String getHeader(String var1);
 30
 31     Enumeration<String> getHeaders(String var1);
 32
 33     Enumeration<String> getHeaderNames();
 34
 35     int getIntHeader(String var1);
 36
 37     default HttpServletMapping getHttpServletMapping() {
 38         return new HttpServletMapping() {
 39             public String getMatchValue() {
 40                 return "";
 41             }
 42
 43             public String getPattern() {
 44                 return "";
 45             }
 46
 47             public String getServletName() {
 48                 return "";
 49             }
 50
 51             public MappingMatch getMappingMatch() {
 52                 return null;
 53             }
 54         };
 55     }
 56
 57     String getMethod();
 58
 59     String getPathInfo();
 60
 61     String getPathTranslated();
 62
 63     default PushBuilder newPushBuilder() {
 64         return null;
 65     }
 66
 67     String getContextPath();
 68
 69     String getQueryString();
 70
 71     String getRemoteUser();
 72
 73     boolean isUserInRole(String var1);
 74
 75     Principal getUserPrincipal();
 76
 77     String getRequestedSessionId();
 78
 79     String getRequestURI();
 80
 81     StringBuffer getRequestURL();
 82
 83     String getServletPath();
 84
 85     HttpSession getSession(boolean var1);
 86
 87     HttpSession getSession();
 88
 89     String changeSessionId();
 90
 91     boolean isRequestedSessionIdValid();
 92
 93     boolean isRequestedSessionIdFromCookie();
 94
 95     boolean isRequestedSessionIdFromURL();
 96
 97     /** @deprecated */
 98     @Deprecated
 99     boolean isRequestedSessionIdFromUrl();
100
101     boolean authenticate(HttpServletResponse var1) throws IOException, ServletException;
102
103     void login(String var1, String var2) throws ServletException;
104
105     void logout() throws ServletException;
106
107     Collection<Part> getParts() throws IOException, ServletException;
108
109     Part getPart(String var1) throws IOException, ServletException;
110
111     <T extends HttpUpgradeHandler> T upgrade(Class<T> var1) throws IOException, ServletException;
112
113     default Map<String, String> getTrailerFields() {
114         return Collections.emptyMap();
115     }
116
117     default boolean isTrailerFieldsReady() {
118         return false;
119     }
120 }

  在Servlet API中,ServletRequest接口被定义为用于封装请求的信息,ServletRequest对象由Servlet容器在用户每次请求Servlet时创建并传入Servlet的service方法中。

  HttpServletRequest接口继承自ServletRequest接口,该接口提供了具有如下HTTP请求信息的处理

    获取请求报文信息(包括请求行,请求头和请求正文)的方法:

     获取请求行信息:

      getMethod():获取请求使用的HTTP方法,例如GET,POST和PUT

      getRequestURL():获取请求行中的资源名部分

      getProtocol():获取协议和版本号

      getQueryString():获取请求URL后面的查询字符串,只对GET有效

      getServletPath():获取Servlet所映射的路径

      getContextPath():获取请求资源所属于的Web应用的路径

    获取请求头信息:

      getIntHeader(String name):获取整数类型的请求头

      getDateHeader(String name):获取单值毫秒类型的请求头

      getContextLength():获取请求内容的长度,以字节为单位

      getContentType():获取请求的文档类型和编码

      getLocale():获取用户浏览器设置的locale信息

      getCookies():获取一个包含在这个请求中所有cookie的数组

    获取请求正文:

      getParameter(String name):返回由name指定的用户请求参数的值

      getParameterNames():返回所有用户请求的参数名

      getParameterValues(String name):返回由name制定的用户请求参数对应的一组值

      getParameterMaps():返回一个请求参数的MAP对象

      ServletInputStream getInputStream():获取上传文件二进制输出流

      BufferedReader getReader():获取上传文件字符缓冲输入流

    获取网络连接信息的方法:

      getRequestURL:返回客户端发出请求时的完整URL。
      getRequestURI:返回请求行中的资源名部分。
      getRemoteAddr:返回发出请求的客户机的IP地址。
      getRemoteHost:返回发出请求的客户机的完整主机名。
      getRemotePort:返回客户机所使用的网络端口号。
      getLocalAddr:返回WEB服务器的IP地址。
      getLocalName:返回WEB服务器的主机名。

    存取请求域属性的方法:

      setAttribute(String name,Object obj)把一个对象和一个属性名以key+value的形式绑定并存放在ServletContext中

      getAttribute(String name) 返回用上一方法中存的对象,根据其对应的属性名

      getAttributeNames():返回一个枚举集合对象,该对象包含了所有存放在ServletContext中的属性名

      removeAttribute(String name):同getAttribute()方法相反,删除一个匹配的对象

HttpServletResponse接口:

  

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package javax.servlet.http;

import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.function.Supplier;
import javax.servlet.ServletResponse;

public interface HttpServletResponse extends ServletResponse {
    int SC_CONTINUE = 100;
    int SC_SWITCHING_PROTOCOLS = 101;
    int SC_OK = 200;
    int SC_CREATED = 201;
    int SC_ACCEPTED = 202;
    int SC_NON_AUTHORITATIVE_INFORMATION = 203;
    int SC_NO_CONTENT = 204;
    int SC_RESET_CONTENT = 205;
    int SC_PARTIAL_CONTENT = 206;
    int SC_MULTIPLE_CHOICES = 300;
    int SC_MOVED_PERMANENTLY = 301;
    int SC_MOVED_TEMPORARILY = 302;
    int SC_FOUND = 302;
    int SC_SEE_OTHER = 303;
    int SC_NOT_MODIFIED = 304;
    int SC_USE_PROXY = 305;
    int SC_TEMPORARY_REDIRECT = 307;
    int SC_BAD_REQUEST = 400;
    int SC_UNAUTHORIZED = 401;
    int SC_PAYMENT_REQUIRED = 402;
    int SC_FORBIDDEN = 403;
    int SC_NOT_FOUND = 404;
    int SC_METHOD_NOT_ALLOWED = 405;
    int SC_NOT_ACCEPTABLE = 406;
    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
    int SC_REQUEST_TIMEOUT = 408;
    int SC_CONFLICT = 409;
    int SC_GONE = 410;
    int SC_LENGTH_REQUIRED = 411;
    int SC_PRECONDITION_FAILED = 412;
    int SC_REQUEST_ENTITY_TOO_LARGE = 413;
    int SC_REQUEST_URI_TOO_LONG = 414;
    int SC_UNSUPPORTED_MEDIA_TYPE = 415;
    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
    int SC_EXPECTATION_FAILED = 417;
    int SC_INTERNAL_SERVER_ERROR = 500;
    int SC_NOT_IMPLEMENTED = 501;
    int SC_BAD_GATEWAY = 502;
    int SC_SERVICE_UNAVAILABLE = 503;
    int SC_GATEWAY_TIMEOUT = 504;
    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

    void addCookie(Cookie var1);

    boolean containsHeader(String var1);

    String encodeURL(String var1);

    String encodeRedirectURL(String var1);

    /** @deprecated */
    @Deprecated
    String encodeUrl(String var1);

    /** @deprecated */
    @Deprecated
    String encodeRedirectUrl(String var1);

    void sendError(int var1, String var2) throws IOException;

    void sendError(int var1) throws IOException;

    void sendRedirect(String var1) throws IOException;

    void setDateHeader(String var1, long var2);

    void addDateHeader(String var1, long var2);

    void setHeader(String var1, String var2);

    void addHeader(String var1, String var2);

    void setIntHeader(String var1, int var2);

    void addIntHeader(String var1, int var2);

    void setStatus(int var1);

    /** @deprecated */
    @Deprecated
    void setStatus(int var1, String var2);

    int getStatus();

    String getHeader(String var1);

    Collection<String> getHeaders(String var1);

    Collection<String> getHeaderNames();

    default void setTrailerFields(Supplier<Map<String, String>> supplier) {
    }

    default Supplier<Map<String, String>> getTrailerFields() {
        return null;
    }
}

HttpServletResponse同HttpServletRequest一样都是继承与javax.servlet包内的接口,它被用来进行HTTP相应信息的处理

HttpServletResponse接口提供了具有如下功能类型的方法:

  设置响应状态的方法:

    setStatus(int sc):以指定的状态码相应返回给客户端

    setError(int sc):使用制定的状态码向客户端返回一个错误响应 

    sendError(int sc,String msg):使用指定的状态码和状态描述向客户端返回一个错误响应

    sendRedirect(String):请求的重定向

  构建响应头的方法:

    setContentType(String mimeType):设置Content-type报头。

setContentLength(int length):设置Content-length报头,用于浏览器持续性HTTP连接。

addCookie(Cookie c):向set-cookie报头插入一个cookie。

    addHeader(String name, String value):新增String类型值到名为name的http头部

    addIntHeader(String name, int value):新增Int类型值到名为name的http头部

    addDateHeader(String name, long value):新增long类型值到名为name的http头部

  创建相应正文的方法:

     getOutputStream():返回字节输出流对象ServletOutputStream

     getWriter():返回字符输出流对象PrintWrite

原文地址:https://www.cnblogs.com/qq965921539/p/10162765.html

时间: 2024-10-25 03:21:52

Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置的相关文章

[原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[原创]java WEB学习笔记05:Servlet中的ServletConfig对象

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

JAVA WEB学习笔记(二)&mdash;&mdash;JavaScript脚本语言

3.1.1    什么是JavaScript     JavaScript是一种基于对象和事件驱动并具有安全性能的解释型脚本语言,不需要编译嵌入在HTTP页面中,把静态页面转变成支持用户交互并响应应用事件的动态页面.     3.1.2    JavaScript的主要特征     解释性.基于对象.事件驱动.安全性(不允许访问本地硬盘,不能写入数据到服务器上,并且不允许对网络文档进行修改和删除).跨平台 =============================================

JAVA Web学习篇--Servlet

Servlet由来 做过BS项目的人都知道,浏览器可以依据HTML静态标记语言来显示各式各样的网页.可是假设我们须要在网页上完毕一些业务逻辑:比方登陆验证.或者说网页显示的内容在server的数据库中.假设是这样,除了负责显示的HTML标记之外,必须还要有完毕这些业务功能的代码存在.这样的网页我们就叫做动态网页. 对于静态网页而言,server上存在的是一个个纯HTML文件.当client浏览器发出HTTP请求时,server能够依据请求的URL找到相应的HTML文件,并将HTML代码返回给cl

Java Web学习(二) Eclipse的配置

Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后根据windows系统32位或64位,进行选择(建议64位).如果你的机器内存过小,可以选择Eclipse的旧版本:Eclipse Indigo .Eclipse Juno . Eclipse Kepler 等版本. 2.解压缩安装 打开压缩包,将里面的Eclipse 拖出到指定位置,进行解压缩.

java web 学习路线

Java Web学习路线   Java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以Java并不是单机版的,只是面向对象语言.建议如果学习Java体系的话可以这样去学习:   *第一阶段:Java基础,包括Java语法,面向对象特征,常见API,集合框架: *第二阶段:Java界面编程,包括AWT,事件机制,SWING,这个部分也可以跳过,用的时候再看都能来及: *第三阶段:Java API:输入输出,多线程,网络编程,反射注解等,Java的精华部分:

Java web基础总结四之—— Servlet基础

Java web基础总结四之-- Servlet基础 一.什么是Servlet? 通过名字就能看出来,Servlet 就是在服务器上运行的小程序.Servlet是sun公司(现在已经属于oracle了)实现的一门用于开发动态java web资源的技术.Sun公司在其API中提供了一个servlet接口,如果你想开发一个动态的java web资源,需要完成以下2个步骤:编写一个Java类,实现servlet接口.把开发好的Java类部署到web服务器中. Servlet接口已经有了两个默认的实现类

Java Web基础教程(二)开发基础

Java Web基础教程(二)开发基础 转载:Future魏来 前言 Java web是一种基于B\S(浏览器\服务器)架构的网络应用程序的技术实现.这种结构的Web应用程序被大量的企业级应用所采用.随着Web应用程序的规模不断扩大,传统的Web开发模式无法满足日渐复杂的业务需要,所以出现了更加合理更加先进的MVC开发模式.随之而来的也出现了一系列的基于MVC模式的开发框架,Struts框架.Spring MVC 等. 1. Web 技术的发展 1. 第一阶段 静态网站 Web技术出现伊始,由于

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------