基于javaWeb阶段下的Servlet总结
1. Servlet概述
Servlet是用Java语言编写的服务端的程序,采用request--response模式提供Web服务,并且支持标准ServletAPI,Servlet就一个运行在web服务器上的小的Java程序,用于处理从web客户端发送的请求,并且对请求作出响应。现在目前版本为3.1。
2. Servlet实现过程
1).客户端向服务器端发送请求;
2).服务器端发送请求到Servlet;
3).Servlet生成响应内容并再传给服务器端(一般生成的响应内容是根据从服务器中客户端的请求而决定的);
4).从服务器再响应返回客户端;
3. Servlet生命周期
简单来讲,Servlet的生命周期就是在服务器内从创建到请求响应再到销毁的全部过程。
在eclipse来看,init()方法就是Servlet实例化,也就是被创建,注意:无论Servlet在服务器请求或者响应多少次,init()只会执行一次;
service()方法,会根据客户端(一般指前段)的请求方式,会调用doPost或者doGet方法;而执行服务器的请求和响应;destroy()方法是Servlet从服务器移除或者关闭时,就代表Servlet已经被销毁了。
4. Servlet启动时加载
ervlet对象是第一次被访问的时候会被创建的,init方法就会执行,从而会销耗一些时间,在eclipse配置web.xml文件将Servlet的实例化的过程放在服务器启动的时候(让服务器启动的时候创建Servlet的对象)。用<load-on-startup>来配置,注意,在Tomcat服务器加载是1秒,因而我们配置的时间最好不要小于1秒。
在web.xml中配置Servlet
<servlet>
<serlvet-name>自定义名称</serlvet-name>
<servlet-class>带包名的类路径</servlet-class>
<load-on-startup>时间单位:秒</load-on-startup>
</servlet>
<servlet-mapping>
<serlvet-name>自定义名称</serlvet-name>
<url-pattern>/路径 出现在地址栏中</url-pattern>
</servlet-mapping>
5. Servlet访问路径的配置
完全路径匹配 以"/"开头
目录匹配 以"/"开头,以"*"结尾
扩展名匹配 以"*"开头
作用域的范围大小:完全路径匹配 > 目录匹配 > 扩展名匹配
6. Servlet和HttpServlet的区别
HttpServlet是继承于Servlet,同时HttpServlet满足Servlet所有的方法,HttpServlet是个类,而Servlet是个接口。HttpServlet是一个与协议相关的Servlet是专门用来处理Http协议的请求。通常编写一个Servlet一般都会让这个Servlet继承HttpServlet重写service方法。所以往往继承了HttpServlet之后不需要重写service方法,只需要重写doGet和doPost方法即可。往往请求要处理的内容的代码都是一致的,所以需 要让doGet和doPost相互调用可以简化编程。
7. ServletConfig和ServletContext的区别
ServletConfig是在Servlet的配置文件中,在使用<url-pattern>标签来配置Servlet的一些初始化参数,后为了创建Servlet实例对象时,这些数据会封装到ServletConfig中;而ServletContext是在整个web应用时,从而初始化的参数就会封装在ServletContext,同时也包含ServletConfig的所有参数,在多个Servlet对象之间的通讯就用ServletContext来联系。
总之,简单来说ServletConfig是获得Servlet的相关的配置的对象,相当于一个类,而ServletContext是获得整个web的相关的配置的对象,相当于整个项目。
8. ServletConfig和ServletContext的各自的方法
1).ServletConfig的方法
获取ServletConfig对象: getServletConfig()
获取Servlet的初始化参数: getInitparameterNames()
获取Servlet的初始化参数(单个): getInitparameter(String name)
获取ServletContext对象: getServletContext()
获取Servlet的名称: getServletName()
2).ServletContext的方法
获取ServletContext对象: getServletContext()
获取文件的MIME类型: getMimeType(String file)
获取web项目请求工程名: getContextPath()
获取全局的初始化参数: getInitparameterNames()
获取全局的初始化参数(单个): getInitparameter(String name)
9. ServletContext作用域及方法
作用域:指的是将数据存入到域对象中,而这个数据就会有一定的作用范围。作用域指的是一定的作用范围。所以,ServletContext作用域是整个全局,及web整个项目
方法:
存入数据: setAttribute(String name, Object object)
获取数据: getAttribute(String name)
移除数据: removeAttribute(String name)
10. Response请求数据
ServletResponse接口和HttpServletResponse接口的区别:HttpServletResponse是继承于ServletResponse,同时HttpServletResponse满足ServletResponse所有的方法,HttpServletResponse是带有Http协议的,与HttpServlet一致。
一般常用的响应的状态码:200 正确;302 重定向;304 查找本地缓存;404 请求资源不存在;500 服务器内部错误
11. Response的方法
设置响应状态码: setStatus(int so)
设置响应头: setHeader(String name, String value)
添加响应头: addHeader(String name, String value)
字符流写入响应体: getWriter()
字节流写入响应体: getOutoutStream()
重定向: sendRedirect(String string)
设置浏览器采用的字符集: setContentType(String string)
设置响应字符流的缓冲区字符集:setCharacterEncoding(String charset)
服务器向浏览器回写Cookie: addCookie(Cookie cookie)
12. Request接收数据
ServletRequest接口和HttpServletRequest接口的区别:与ServletResponse接口和HttpServletResponse接口的区别一致。
13. Request的方法
获取请求方式: getMethed()
获得请求路径后的提交参数的字符串: getQueryString()
获得请求路径的URL: getRequestURL()
获得请求路径的URI: getRequestURI()
获得客户端的IP地址: getRemoteAddr()
获得一个key对应一个value的请求头: getHeader(String name)
获得一个key对应多个value的请求头: getHeaders(String names)
提交的参数(一个name对应一个value): getParameter(String name)
提交的参数(一个name对应多个value): getParameterValues(String names)
提交的参数(Map集合方式): getParameterMap()
存储数据: setAttribute(String name, Object object)
获取数据: getAttribute(String name)
移除数据: removeAttribute(String name)
14. Response和Request的中文乱码
因为,Servlet的语言设置是ISO-8850-1,是不支持中文的,因而在请求和响应是出现中文乱码。
1).Response解决中文乱码
a.字节流响应中文
原因:其实这个乱码的产生与中文转成字节数组及浏览器打开方式(打开的时候采用的默认字符集)有关。
解决:将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致即可,都转换UTF-8。
解决代码:
ServletOutoutStream out = response.getOutoutStream();
response.setHeader("Content-Type","text/html;charset=utf-8");
out.write("中文的字符串".getBytes("utf-8"));
b.字符流响应中文
原因:字符流是有缓冲区的,response获得字符流,response设计默认的缓冲区编码是ISO-8859-1。
解决:设置response获得字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可。
解决代码:
response.setHeader("Content-Type","text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().println("中文的字符串");
简化版:
response.setContentType("text/html;charset=utf-8");
response.getWriter().println("中文的字符串");
2).Request解决中文乱码
a.Post方式接收中文
原因:post提交数据的方式是在请求体中,request对象在接受数据之后,放入到缓冲区中,就会产生缓冲区的编码是ISO-8859-1。
解决:修改request的缓冲区编码
解决代码:
request.setCharacterEncoding("utf-8");
String str = request.getInitparameter("//要修改的参数");
System.out.println(str);
b.Get方式接收中文
原因:post提交数据的方式是在请求行url后面,则会在地址栏进行url编码
解决:存入到缓冲区的值将ISO-8859-1,以UTF-8解码
解决代码:
String encode = URLEncoder.encode(//要修改的参数,"ISO-8859-1");
String decode = URLDecoder.decode(encode,"utf-8");
System.out.println(decode);
解决代码二:
String //要修改的参数 = request.getParameter("//要修改的参数");
String str = new String(//要修改的参数.getBytes("ISO-8859-1"),"utf-8");
System.out.println(str);
15. Get请求和Post请求的区别
* Get提交方式特点:把数据拼接到地址栏上,无请求体,Post提交方式特点:没有把提交 数据拼接到地址栏上,有请求体;
* Get提交的参数列表拼接到了地址栏后面;Post方式不会 拼接地址栏;
* Get方式提交的数据敏感信息不安全;Post方式提交的数据相对安全;
* Get方式提交的数据量有限的;Post方式从理论上提交的数据量 无限大。
故一般开发使用Post请求传送数据。
基于javaWeb阶段下的Servlet总结的更多相关文章
- 基于javaWeb阶段下的Cookie和Session总结
1. 会话技术 就是用户在使用浏览器浏览界面的时候,去访问多个页面后一次性关闭浏览器,这个过程叫会话,学习会话技术就是在客户端与服务器进行交互的时候为了能更好的保存数据.在java中会话技术只有C ...
- 基于JavaSE阶段下的集合类汇总
一.数组与集合的区别 数组和集合都是用来存储对象的容器,但是,数组只能储存基本数据类型的对象,且长度不可变:而集合是储存引用数据类型的对象,且长度可变,所以,在不知对象数量的具体数值时一般用集合来存储 ...
- 【JavaWeb】学习笔记——Servlet、Filter、Listenter
Servlet Servlet 简介 Servlet 是 Java提供的一门动态web资源开发技术 Servlet 是JavaEE 规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Se ...
- 基于JavaWeb实现的研究室综合系统
代码地址如下:http://www.demodashi.com/demo/14641.html 概述 基于JavaWeb实现的研究室综合系统,功能包括研究室成员注册.登陆,后台管理,相册功能,新闻模块 ...
- JavaWeb基础总结:Servlet专题
最近工作中有部分整改老接口的任务,大部分与Spring的拦截器,Tomcat相关,改到一些底层的代码发现,对基础J2EE的知识有些遗忘,需要频繁查阅,索性从头系统的整理一下Servlet和Filter ...
- 基于jQuery向下弹出遮罩图片相册
今天给大家分享一款基于jQuery向下弹出遮罩图片相册.单击相册图片时,一个遮罩层从上到下动画出现.然后弹出显示图片.这款插件适用浏览器:IE8.360.FireFox.Chrome.Safari.O ...
- 一款基于jquery的下拉点击改变背景图片
今天给大家介绍一款基于jquery的下拉点击改变背景图片.单击右上角的图片,下拉显示可选择的背景图片,单击图片变为背景图.效果图下: 在线预览 源码下载 实现的代码. html代码: <a ...
- 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...
- 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放
这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...
随机推荐
- 第六次ScrumMeeting博客
第六次ScrumMeeting博客 本次会议于10月31日(二)22时整在3公寓725房间召开,持续15分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕.方科栋. 除了汇报任务外,窦鑫泽同学还就前 ...
- <力荐>非常好的正则表达式的详解<力荐>
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, dir *.t ...
- 【转】React-Native 实现增量热更新的思路
所谓热更新就是在不重新安装的前提下进行代码和资源的更新,相信在整个宇宙中还不存在觉得热更新不重要的程序猿. 增量热更新就更牛逼了,只需要把修改过和新增的代码和资源推送给用户下载即可,增量部分的代码和资 ...
- Python Requests库简单入门
我对Python网络爬虫的学习主要是基于中国慕课网上嵩天老师的讲授,写博客的目的是为了更好触类旁通,并且作为学习笔记之后复习回顾. 1.引言 requests 库是一个简洁且简单的处理HTTP请求的第 ...
- Scrum立会报告+燃尽图(十一月二十二日总第三十次):加强回归测试
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2410 项目地址:https://git.coding.net/zhang ...
- 欢迎来怼-----Beta冲刺贡献分数分配结果
队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文
- 20172305 2018-2019-1 《Java软件结构与数据结构》第八周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第八周学习总结 教材学习内容总结 本周内容主要为书第十二章内容: 堆(附加属性的二叉树) 完全二叉树 (最小堆)对于 ...
- 【java】中缀表达式转后缀表达式 java实现
算法: 中缀表达式转后缀表达式的方法:1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出 ...
- RIGHT-BICEP测试第二次程序
根据Right-BICEP单元测试的方法我对我写的第二次程序进行了测试: 测试一:测试能否控制使用乘除 测试二:测试是否能加括号 测试三:是否可以控制题目输出数量 测试四:能否控制输出方式,选择文件输 ...
- CodeForces 483B 二分答案
题目: B. Friends and Presents time limit per test 1 second memory limit per test 256 megabytes input s ...