Servlet基础学习
Servlet学习
Servlet是Server与Applet的缩写,是服务端小程序的意思。使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准来开发的类。
Servlet本质上也是Java类,但要遵循Servlet规范进行编写,没有main()方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。
Servlet容器
提供了Servlet功能的服务器,叫做Servlet容器,其常见容器有很多,如Tomcat, Jetty, WebLogic Server, Websphere, JBoss等等。
作用:接收请求数据, 处理请求, 完成响应。
HttpServletRequest对象
HttpServletRequest对象: 主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来。
常用的方法
getRequestURL: 返回客户端发出请求时的完整URL
getRequestURI: 返回请求行中的资源名部分(项目名称开始)
getQueryString : 返回请求行中的参数部分
getMethod: 获取客户端请求方式
getProtocol: 获取HTTP版本号
getContextPath: 获取webapp名字
getHeader (String name): 获取单个请求头内容
Enumeration<String> getHeaderNames(): 获取所有的请求头名称集合
getParameter(name): 获取指定名称的参数值,这是最为常用的方法之一。
getParameterValues(String name): 获取指定名称参数的所有值数组。它适用于一个参数名对应多个值的情况:如页面表单中的复选框,多选列表提交的值。
getParameterNames(): 返回一个包含请求消息中的所有参数名的Enumeration对象。通过遍历这个Enumeration对象,就可以获取请求消息中所有的参数名。
getParameterMap(): 返回一个保存了请求消息中的所有参数名和值的Map对象。Map对象的key是字符串类型的参数名,value是这个参数所对应的Object类型的值数组
请求乱码解决
req.setCharacterEncoding("UTF-8");这种方式只针对POST有效
new String(req.getParameter(name).getBytes(“ISO-8859-1”));
request域对象,通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效
request.setAttribute(): 设置request域对象内容
request.getAttribute(String name): 获取指定request域对象内容
request.removeAttribute(String name): 删除指定request域对象
HttpServletResponse对象
HttpServletResponse的主要功能用于服务器对客户端的请求进行响应,将WEB服务器处理后的结果返回给客户端。service()方法中形参接收的是HttpServletResponse接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
常用方法
addCookie(Cookie cookie): 将指定的Cookie加入到当前的响应中
addHeader(String name,String value): 将指定的键值加入到响应头信息中
containsHeader(String name) : 返回一个布尔值,判断响应的头部是否被设置
encodeURL(String url): 编码指定的URL
sendError(int sc): 使用指定状态码发送一个错误到客户端
sendRedirect(String location): 发送一个临时响应到客户端,重定向
setHeader(String name,String value): 将给出的名字和值设置响应的头部
setStatus(int sc): 给当前响应设置状态
setContentType(String ContentType): 设置响应的MIME类型
getWriter(): 获取输出字符流
getOutputStream(): 获取输出的字节流
刷新、跳转页面
resp.setHeader("refresh","2"); 定时刷新
response.setHeader("refresh","3;URL=login.html"); 定时跳转,3秒后跳转到登录界面
<meta http-equiv="refresh" content="3;http://www.shsxt.com>; HTML设置头信息实现客户端跳转
返回状态码
sendError(int sc); 设置错误状态代码
sendError(int sc,String msg); 设置状态码,并返回一条错误信息
添加Cookie
addCookie("islogin","true"); 浏览器保存Cookie。Cookie常用来维护会话状态。
跳转
request.getRequestDispacther(“url”).forword(request,response); 请求转发,服务器跳转,地址栏的URL不变
response.sendRedirect("url"); 请求重定向,属于客户端跳转,地址栏改变,存在两个请求
重定向过程:客户浏览器发送http请求--->web服务器接受后发送302状态码响应及返回对应的location给客户浏览器-->浏览器发现是302响应,自动再发送一个新的http请求,请求的url是新的location地址-->服务器根据此请求寻找资源并发送给客户。
响应乱码解决
当服务器端响应给客户端中文时,可能存在乱码
两种方式响应回数据:PrintWriter 和 ServletOutputStream
PrintWriter():
response.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=utf-8");
ServletOutputStream();
response.setContentType("text/html;charset=utf-8");
HttpSession对象
常用方法
setAttribute(String name,Object value): 将value对象以name名称绑定到会话。
getAttribute(String name): 取得name的属性值,如果属性不存在则返回null。
removeAttribute(String name): 从会话中删除name属性,若不存在不会执行,也不会抛处错误。
Enumeration getAttributeNames(): 返回和会话有关的枚举值。
invalidate(): 使会话失效,同时删除属性对象。
isNew(): 用于检测当前客户是否为新的会话。
long getCreationTime(): 返回会话创建时间。
getLastAccessedTime(): 返回会话时间内web容器接收客户最后发出的请求时间。
int getMaxInactiveInterval(): 返回在会话期间内客户请求的最长时间为秒。
setMaxInactiveInterval(int seconds): 允许客户客户请求的最长时间。
ServletContext getServletContext(): 返回当前会话的上下文环境,ServletContext对象可以使Servlet与web容器进行通信。
String getId(): 返回会话期间的识别号。
Session: 默认是在第一次使用Session时被创建。
Cookie: 大部分都是通过服务器主动(程序手动)设置到浏览器的, 只有JSESSIONID是服务自己设定的, 不需要程序员操心。
ServletContext对象
一个web应用只有一个ServletContext对象,所有的servlet都共享这个ServletContext对象,又称为Application对象。ServletContext 对象包含在 ServletConfig 对象中,ServletConfig对象在初始化 servlet 时由 web 服务器提供给 servlet。
常用方法
getInitParameter(String name): 获取初始化参数
getResource(String parh)方法: 其中path必须是/开头,代表当前web应用程序的根目录。返回返回的一个代表某个资源的URL对象。
getResoutceAsStream(String parh): 返回文件流。这个好处是可以使用相对于根目录的路径访问到web目录下的所有文件,而不必知道绝对路径。
getContextPath(): 得到web应用的路径
getRealPath(): 获取绝对路径
servletcontext域对象
ServletContext是一个全局的储存信息的对象,服务器开启就存在,服务器关闭才释放。
一个用户可有多个request;一个用户只有一个session;而所有用户共用一个servletContext。所以为了节省空间提高效率,ServletContext中存放的信息是必须的、重要的、所有用户需要共享的线程。
request.getServletContext().setAttribute(): 设置域对象内容
request.getServletContext().getAttribute(String name): 获取域对象内容
request.getServletContext().removeAttribute(String name): 删除域对象
Servlet基础学习的更多相关文章
- servlet基础学习总结
Servlet的任务 1. 读取客户端发送的显示的数据,包括HTML表单和一些客户端程序的表单 2. 读取客户端发送的隐式的数据,包括cookies.媒体类型等 3. 处理数据并产生结果 4. ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- Struts2基础学习2
Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ...
- Servlet还有学习的必要吗?(手工搭建Servlet)
前言 在初学Java web的时候,就曾听到过这样一种说法: java Web的演变过程大概可以分为4个阶段: jsp + Servlet + jdbc spring + struts2+ hiber ...
- Spring Framework基础学习
Spring Framework基础学习 Core support for dependency injection,transaction management,web applications,d ...
- MacOS下SpringBoot基础学习
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springboot"获取视频和教程资料! b站在线视 ...
- maven基础学习-为什么要用maven,帮助解决了什么问题,怎么解决的,希望以后学习每个知识点都可以这样问下自己
maven基础学习 第1章 Maven介绍 1.1 什么是Maven 1.1.1 什么是Maven Maven 的正确发音是[ˈmevən],而不是"马瘟"以及其他什么瘟.Mave ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
随机推荐
- Gravitational Teleport docker-compose简单运行
Gravitational Teleport 可以作为堡垒机进行使用,为了测试方便使用docker-compose 运行一个all in one 的demo 备注: 官方提供的docker-compo ...
- 使用 Prometheus 监控minio 性能指标信息&&docker-compose 方式运行
minio server 已经支持Prometheus 了,对于系统的运行参数我们可以方便.实时的查看 运行使用docker-compose docker-compose 文件 version: &q ...
- php Call to undefined function imagettftext()问题解决
测试代码出现报错Call to undefined function imagettftext(),发现是gd库出现了问题 通过phpInfo()查看 gd库已经开启,但是里边没有freeType 和 ...
- dojo:如何用MultiSelect实现类似ListBox风格的FromTo功能
欲实现的功能如下图: 主要要解决的问题包括两个方面: 一个是MultiSelet初始化的工作,一个是FromTo功能按钮的实现.这主要是因为MultiSelect控件是存储无关的,并不像Select或 ...
- Hanlp自然语言处理工具的使用演练
Hanlp是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用.Hanlp具备功能完善.性能高效.架构清洗.语料时新.可自定义的特点:提供词法分析(中文分词.磁性标注.命名实体识 ...
- C#:decimal的去0显示
public static string DecimalToString(decimal d) { return d.ToString("#0.######"); } 后面的0会给 ...
- ecstore-安装提示flock,即使绕过检测,安装成功后还是提示t function 解决办法
安装时先绕过去 安装好后,修改config.php里的TMP_DIR,指向网站目录下的data目录(用绝对路径) 分析:应该是php的运行用户没有对tmp目录的写权限.中电云集的管理工具就出现过
- Ubuntu中编译helloworld驱动
1. 新建hello文件夹 2.hello.c #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # define MODULE ...
- 虚拟机中安装centOS及破解nuke的方法
跟the foundry的工程师邮件交流,我的一个Nuke脚本在对方机器上执行有问题,确认对方是centOS之后我决定在自己机器上安装一个centOS来找一下问题所在.安装重点如下: 一: 一定要下载 ...
- Windows Azure Storage (24) 启用Azure Blob日志
<Windows Azure Platform 系列文章目录> 之前有一个业务需求,客户想知道Azure Storage是否有日志功能,可以检查某个Azure Blob文件在某个时间点被删 ...