博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Web笔记
阅读量:4292 次
发布时间:2019-05-27

本文共 7378 字,大约阅读时间需要 24 分钟。

Servlet: Servlet接口

GenericServlet: Servlet接口的实现类

HttpServlet: http协议的Servlet实现类

ServletConfig: servlet配置信息

PrintWriter: 浏览器输出流

Cookie: 将信息保存到浏览器

三大域对象:

ServletRequest: 请求信息(通过请求转发和请求包含实现通信)(单次连接)

HttpSession: 用来会话跟踪的类(服务器端对象)

ServletContext: 实现多个Servlet对象的通信(与服务器同生共死)

ServletResponse: 响应信息接口

HttpServletResponse: http响应信息接口

ServletRequest: 请求信息接口

HttpServletRequest: http请求信息接口

AsyncContext: 异步上下文对象(3.0)

Servlet监听器(创建、销毁对象,更改对象中的属性时)

Filter:过滤器(截断请求,进行过滤)

Servlet

java用于开发动态web资源的技术

定义了所有servlet必须实现的方法

public void init(ServletConfig config):

创建后马上执行,并只执行一次,生命周期方法

public void service(ServletRequest req, ServletResponse res):

每次处理请求时调用,生命周期方法

public void destroy():在销毁前调用,只执行一次,生命周期方法

public String getServletInfo():获取servlet信息

public ServletConfig getServletConfig():获取servlet配置信息

Servlet3.0的注解

@WebServlet()

属性:

value: 为<url-pattern>

urlPatterns: 为<url-pattern>,与value只写一个

name: 为<servlet-name>

initParams: 为<init-param>,initParams={@WebInitParam(name="",value="")}

oladOnStartup: 为<load-on-startup>

asyncSupported: 是否支持异步(默认false)

GenericServlet

通过集成该类,实现Servlet接口

子类可重写init()方法 :初始化

destroy()方法:销毁前操作

public void service(ServletRequest req, ServletResponse res):这个方法要自己实现

HttpServlet

与http协议相关的Servlet实现类

子类一般只需要重写doGet()和doPost()方法(不重写访问时会出现405错误)

service(ServletRequest req, ServletResponse res)方法将参数转型后传给

service(HttpServletRequest req, HttpServletResponse resp)

此方法分析请求方式为GET或POST,然后调用方法doGet()或doPost()

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

ServletConfig

接口

获取方式:

Servlet.getConfig();

方法:

String getServletName(): 获取<servlet-name>中的内容

ServletContext getServletContext():获取servlet上下文本对象

Enumeration<String> getInitParameterNames(): 获取所有初始化参数名

String getInitParameter(String name):根据名称获取指定初始化参数值

ServletContext

javaweb中域对象之一

该类在服务器中只有一个实例

获取方法:

ServletConfig.getServletContext();

GenericServlet.getServletContext();

HttpSession.getServletContext();

ServletContextEvent.getServletContext();

函数:

void setAttribute(String name, Object object):用来存储一个对象

Enumeration<String> getAttributeNames():获取该域内所有对象名称

Object getAttribute(String name):获取对象

void removeAttribute(String name):删除对象

String getInitParameter(String name): 返回初始化参数的值

String getRealPath(String path): 得到绝对路径,参数为项目中的相对路径

InputStream getResourceAsStream(String path):得到输入流

Set<String> getResourcePaths(String path):得到目录下所有文件路径

HttpServletResponse

响应信息

扩展了ServletResponse接口,提供HTTP相关功能,发送响应

父类方法:

ServletOutputStream getOutputStream(): 获取向客户端发送字节数据的类

PrintWriter getWriter(): 获取向客户端发送字符数据的类,需要设置编码

void setCharacterEncoding(String charset): 设置PrintWriter的编码

直接setHeader("Content-Type", "text/html; charset=utf-8")会设置编码

状态码:

void sendError(int sc): 发送错误状态码

void sendError(int sc, String msg): 发送错误状态码和错误信息

void setStatus(int sc): 发送正确状态码

响应头:

void setHeader(String name, String value): 设置一个指定名字,指定值的头

void addHeader(String name, String value): 用给定的名称和值添加一个响应头。允许一个头对应多个值

void setIntHeader(String name, int value): 设置一个给定名称的响应头和整数值

void addIntHeader(String name, int value): 用给定的名称和整数值添加一个响应头。允许一个头对应多个值

void setDateHeader(String name, long date): 设置一个给定名称的响应头和毫秒值

void addDateHeader(String name, long date): 用给定的名称和毫秒值添加一个响应头。允许一个头对应多个值

void addCookie(Cookie cookie): 想浏览器保存Cookie

void sendRedirect(String location): 指定重定向的url

重定向时,字符串中有中文,要解决编码问题

编码:string = URLEncoder.encode(string, "UTF-8");(重定向Servlet)(编码前需要解响应编码)

解码:string = URLDecoder.decode(string, "UTF-8");(目标Servlet)(解码后还需要解请求编码)

String encodeRederectURL(String uri): 可以解决Cookie禁用后,Session的跟踪问题(jsessionid会写道地址栏,不安全)

uri = response.encodeRedirectURL(uri);

response.sendRederect(uri);

String encodeURL(String uri): 解决Cookie禁用后,非重定向是的Session跟踪问题(不安全)

uri = response.encodeURL(uri);

out.println("<a href='" + uri + "'>跳转</a>");

响应编码:

使用response.setCharacteEncoding("utf-8")试着发送流编码

response.setHeader("Content-Type","text/html;charset=utf-8");还会执行上面的代码,一句顶两句

response.setContntType("text/html;charset=utf-8"); 和上面一句效果相同

HttpServletRequest

请求信息

扩展了ServletReques接口,提供HTTP相关功能

父类方法:

String getRemoteAddr(): 获取ip地址

获取请求头:

String getHeader(String name): 获取单值的头

int getIntHeader(String name): 获取单值整型的头

long getDateHeader(String name): 获取单毫秒类型的头

Enumeration<String> getHeaders(String name): 获取多值的请求头

获取请求url:

String getScheme(): 获取协议

String getServerName(): 获取服务器名

int getServerPort(): 获取服务器端口号

String getContextPath(): 获取项目名

String getServeltPath(): 获取Servlet路径

String getQueryString(): 获取参数部分

String getRequestURI(): 获取请求URI(项目名+Servlet路径)

String getRequestURL(): 获取请求URL(不包含参数的整个请求路径)

获取请求参数:

String getParameter(String name): 获取指定名称的参数值(适用于单值)

String[] getParameterValues(String name): 获取指定名称的参数值(适用于多值)

Enumeration<String> getParameterNames(): 获取所有请求参数名称

Map<String,String[]> getParameterMap(): 获取所有请求参数

Cookie[] getCookies(): 获取浏览器归还的Cookie

请求转发和请求包含 getRequestDispatcher

RequestDispatcher(String path): 得到RequestDispatcher对象,path为对象Servlet路径

请求转发: RequestDispatcher.forward(request, response);(仅保留本对象对响应头的操作)

请求包含: RequestDispatcher.include(request, response);(共同完成)

域的使用:

void setAttribute(String name, Object value)

Object getAttribute(String name)

请求编码( tomcat9 get请求的默认编码为utf-8):

POST:

在获取参数前调用request.setCharacterEncoding("utf-8");

GET:

反编译

String name = request.getParameter("name");

byte[] bytes = name.getBytes("ISO-8859-1");

name = new String(bytes, "utf-8");

HttpSession

获取方法:

request.getSession(); 没有就创建

request.getSession(false); 没有就返回null

相关域方法:

void setAttribute(String name, Object object):用来存储一个对象

Object getAttribute(String name):获取对象

void removeAttribute(String name):删除对象

Cookie

public void setMaxAge(int expiry): (默认会话结束时删除)

expiry>0: 在硬盘上保存expiry秒

<0: 只在内存中保存

=0: 立刻删除

public void setPath(String uri): 为Cookie指定一个路径,只有当访问路径包含这个路径时,返回此Cookie

默认当前目录

public void setDomain(String domain): 在多个二级域中共享Cookie

例如:在www.baidu.com、tieba.baidu.com之间共享Cookie,如下设置

cookie.setDomain(".baidu.com"); sookie.setPath("/");

Filter

需要在web.xml文件注册

对客户端的请求进行过滤(单例多线程)(在服务器启动时创建并初始化)

void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

子类实现该方法,对请求进行拦截过滤 操作

操作完成后,通过chain(request,response);方法可将请求发送给下一个资源

当服务器将响应发出时也会被拦截

void destroy(): 销毁Filter

void init(FilterConfig filterConfig): 初始化Filter

FilterConfig对象的方法与ServletConfig相同

Servlet3.0的注解

@WebFilter()

属性:

value: 为<url-pattern>

urlPatterns: 为<url-pattern>,与value只写一个

servletNames: 为<servlet-name>

name: 为<filter-name>

dispatcherTypes: 为<dispatcher>

Listener

监听器需要在web.xml文件中注册

Servlet2.0

ServletContextListener:在ServletContext创建(Initialized)和销毁(Destroyed)时

HttpSessionListener:在Session创建(sessionCreated)和销毁(sessionDestroyed)时

ServletRequestListener: 在Request创建(Initialized)和销毁(Destroyed)时

ServletContextAttributeListener:在ServletContext域中的变量更新时

HttpSessionAttributeListener: 在Session域中的变量更新时

ServletRequestAttributeListener: 在Request域中的变量更新时

attributeAdded(): 添加时调用

attributeRemoved(): 删除时调用

attributeReplaced(): 更新时调用

HttpSessionActivationListener: 当实现此接口的类对象被钝化和活化时(无需注册)

sessionWillPassivate(): 从内存写入硬盘(钝化)前

sessionDidActivate(): 从硬盘恢复到内存(活化)后

HttpSessionBindingListener: 当实现此接口的类对象被添加到Session域中时(无需注册)

valueBound(): 添加时调用

valueUnbound(): 删除时调用

Servlet3.0的注解:

@WebListener

AsyncContext

得到异步上下文对象:

request.startAsync(request, response);

结束方法:

1.在异步子线程中使用AsyncContext.complete()方法,

2.在异步子线程中使用AsyncContext.dispatch()方法,执行效果相当于包含

3.在异步Servlet主线程中设置AsyncContext的潮湿时限

启动异步线程:

AsyncContext.start(Runnable);

AsyncContext.addListener(Listener): 为异步操作添加监听器

转载地址:http://orwws.baihongyu.com/

你可能感兴趣的文章
网格马丁格尔交易法
查看>>
TA-LIB 200多个技术指标含有及计算式
查看>>
一行代码让 Python 的运行速度提高100倍
查看>>
一行 Python 实现并行化 -- 日常多线程操作的新思路
查看>>
期货市场的运作机制
查看>>
一文精通 crontab从入门到出坑
查看>>
股票连续跌停后开板表现
查看>>
东航期货行情接口和交易接口(20190509)
查看>>
ubnutu系统完美克隆至新硬盘,系统备份迁移至新硬盘
查看>>
ubnutu系统完美克隆至新硬盘,系统备份迁移至新硬盘
查看>>
东航期货模拟交易brockerid(期货公司的客户号)
查看>>
史上最全量化资源整理
查看>>
anaconda 清华源挂了 怎么办 上交源ok
查看>>
vnpy2.0安装后报错ModuleNotFoundError: No module named 'vnpy.api.ctp.vnctpmd'
查看>>
东航期货穿透接口相关资料
查看>>
VNPY2.0火币期货交易接口配置使用
查看>>
win10和ubuntu18双系统时间同步(20190604亲测可行)
查看>>
重启小狼毫输入法,rime输入法重启
查看>>
命令行或终端ImportError:No module named(pycharm运行没问题)
查看>>
量化策略回测01双均线
查看>>