Servlet-个人归纳总结
1 什么是javaweb程序?
运行在服务器上java程序就是javaweb程序,通过浏览器访问,例如我常说的网站就是典型的web程序。Web程序属于B/S架构的程序。
2 B/S架构的程序?B/S架构的程序与C/S架构的程序比较?
B–浏览器 S–服务器 【通过浏览器访问服务器上的程序】【在线的】
与B/S架构相对的就是C/S架构的程序
C-客户端 S–服务器 【通过客户端访问服务器上的程序】【下载的/安装的】
B/S架构的程序 |
C/S架构的程序 |
通过浏览器访问【在线的】 |
通过客户端访问【下载的/安装的】 |
节省本地磁盘资源【不需要下载】 |
消耗本地磁盘资源【将资源下载到本地】 |
维护起来简单【只需要维护好服务器】 |
维护起来复杂【既要维护客户端又要维护服务器】 |
成本低 |
成本高 |
现在所有的C/S架构的程序基本上已经被B/S架构的程序取代。
3 Web程序发展过程?
早期Web程序只能通过浏览器访问静态页面【HTML】
随着需求的变化,后来Web程序可以通过浏览器访问动态资源【动态网页】。
静态页面---任何请求访问的页面都是一模一样的,不后有任何变化【标配】
动态网页---随着请求的变化打开不同的页面【不同的用户/不同是时间】【定制】
现在随着用户需求得到变化,我们需要提供不同的资源,以满足所有的用户需求,那么这时我们就要掌握动态网页技术。
4 常见的动态网页技术?
cgi[通用网关接口]【1、运行慢 2.基于进程的数据交互麻烦】
Servlet/jsp-----java
asp--------------C#
php-------------php语法
5 什么是Servlet?
运行在服务器上用来处理用户的请求,做出响应的java程序就是Servlet。
6 常见的web服务器
WEB服务器也称为WWW服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。Unix和Linux平台下常用的服务器有ApacheTomcat、Nginx[负载均衡【分布式】]、IBM WebSphere、WebLogic等,其中应用最广泛的是ApacheTomcat。
7 ApacheTomcat服务器下载?安装?启动?测试?关闭?
下载ApacheTomcat服务器
http://tomcat.apache.org/
下载好的压缩包
安装ApacheTomcat服务器【apache-tomcat-7.0.96-windows-x64.zip】,在指定目录下解压缩。
启动运行ApacheTomcat服务器,在安装目录中打开bin目录,运行startup.bat批处理文件,即可运行ApacheTomcat服务器
测试ApacheTomcat服务器,打开浏览器输入http://127.0.0.1:8080
关闭ApacheTomcat服务器,在安装目录中打开bin目录,运行shutdown.bat批处理文件,即可关闭ApacheTomcat服务器。
8 开发一个简单的Servlet程序部署到服务器上运行
创建一个Dynamic Web Project工程
选择具体的服务器安装目录和jre
在src下创建一个包,在这个包中创建一个“TestServlet”类,继承HttpServlet
重写doGet/doPost方法
在doGet方法中调用doPost
将需要由servlet处理的请求的具体动作写入doPost方法中
打开WebContent/WEB-INF/web.xml,配置我们编写好的servlet
部署Servlet程序到服务器
运行程序【选择自己配置部署好的服务器–右键—start】
访问【http://127.0.0.1:8080/xxxxxxxx】
9 Servlet的生命周期?
Servlet的生命周期是从开始创建servlet对象一直到处理客户端请求以后,的整个过程就是Servlet的生命周期
servlet在运行的时候是由Servlet容器【服务器】来管理和维护Servlet的运行。不是程序开发者自己去实例化Servlet对象,然后调用方法执行,处理用户请求的。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>TestServletDemo1</display-name><servlet><servlet-name>testServlet</servlet-name><servlet-class>com.click369.servlet.TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test</url-pattern></servlet-mapping>
</web-app>package com.click369.servlet;import java.io.IOException;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet{/*** servlet的初始化方法init* 可以在这个方法中得到数据库对象等等这些操作* 就是在这个地方去完成一些在处理用户请求之前需要的一些准备工作* 在请求第一次执行的时候,只被执行了一次。*/@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("servlet的初始化方法init方法");}/*** Servlet的service方法处理用户的请求并作出响应* HttpServletRequest---请求对象* HttpServletResponse---响应对象* 会被多次执行*/@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {System.out.println("处理用户请求作出响应的service方法");}/*** servlet对象的销毁方法* 完成一些在处理用户请求之后需要的一些收尾工作* 例如:关闭数据库/输出输出流*/@Overridepublic void destroy() {System.out.println("销毁实例化好的Servlet对象,释放Servlet所占用的内存空间");}
}
10 Servlet中常用的接口,类,方法
Servlet接口javax.servlet.Servlet
javax.servlet.Servlet接口
init(ServletConfig)--初始化方法
ServletConfig getServletConfig()--得到Servlet配置对象【web.xml对应的java对象】
void service(javax.servlet.ServletRequest arg0, javax.servlet.ServletResponse arg1)--请求处理
String getServletInfo()--servlet信息【不常用】
void destroy()---销毁servlet对象
例如:
package com.click369.servlet;import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class MyServlet implements Servlet{/*** servlet的初始化方法* @param arg0* @throws ServletException*/@Overridepublic void init(ServletConfig arg0) throws ServletException {System.out.println("servlet的初始化方法");}/*** servlet的请求处理方法* @param arg0* @param arg1* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {System.out.println("servlet的请求处理方法");}/***servlet的销毁方法*/@Overridepublic void destroy() {System.out.println("servlet的销毁方法");}/*** 得到servlet的配置对象* @return*/@Overridepublic ServletConfig getServletConfig() {return null;}/*** 得到servlet基本信息* @return*/@Overridepublic String getServletInfo() {return null;}
}
ServletConfig接口javax.servlet.ServletConfig----Servlet配置对象【web.xml对应的java对象】
Strign getServletName()--得到web.xml中配置servlet-name
例如:
ServletConfig conf=this.getServletConfig();
String servletname=conf.getServletName();
String getInitParameter(String)---得到在web.xml文件中配置的初始化参数值
例如:需要在web.xml文件中配置一个/多个初始化参数<servlet><servlet-name>test</servlet-name><servlet-class>com.click369.servlet.TestServlet</servlet-class><init-param><param-name>myname</param-name><param-value>zhangsan</param-value></init-param><init-param><param-name>myaddress</param-name><param-value>西安</param-value></init-param></servlet>
通过String getInitParameter(String)---得到在web.xml文件中配置的初始化参数值
//得到ServletConfig对象
ServletConfig conf=this.getServletConfig();
String name=conf.getInitParameter("myname");
String address=conf.getInitParameter("myaddress");
System.out.println(name+" "+address);
ServletContext getServletContext()---得到servlet上下文对象【运行环境】
可以获取当前服务器所支持的Servlet版本号
例如:
ServletConfig conf=this.getServletConfig();ServletContext context=conf.getServletContext();int majorVersion=context.getMajorVersion();//主版本号int MinorVersion=context.getMinorVersion();//次版本号System.out.println(majorVersion+"."+MinorVersion);
HttpServletRequest接口javax.servlet.http.HttpServletRequest【表示一个http请求对象】
HttpServletRequest继承了javax.servlet.ServletRequest
void setCharacterEncoding(String)–设置请求对象的字符编码
String getCharacterEncoding()----得到请求对象的字符编码
String getParameter(String)–得到指定请求参数的值
HttpServletResponse接口 javax.servlet.http.HttpServletResponse【表示一个http响应对象】
HttpServletResponse接口继承了 javax.servlet.ServletResponse
sendRedirect(String)----设置跳转
setCharacterEncoding(String)---设置响应对象的字符编码
11 forward与Redirect【resp.sendRedirect(String)】跳转的区别?
11.1 forward是指通过RequestDispatcher对象调用forward方法完成跳转
通过HttpServletRequest对象调getRequestDispatcher方法就可以得到RequestDispatcher对象
所谓的forward跳转实际上是请求的一次转发,所以forward有时被认为是请求转发,最显著的特征是浏览器地址栏中的地址不会发生变化,因为跳转的时候使用的是同一个请求对象。
跳转的时候可以去掉跳转路径前面的“/”
req.getRequestDispatcher("/tow").forward(req,resp);
req.getRequestDispatcher("tow").forward(req, resp);
11.2 Redirect指的是通过HttpServletResponse对象调用sendRedirect(String)方法完成跳转
HttpServletResponse对象.sendRedirect(String)
所谓的Redirect跳转实际上是请求的一次重定向,所以Redirect有时被认为是请求重定向,最显著的特征是浏览器地址栏中的地址会发生变化,因为跳转的时候使用的是不在是同一个请求对象。
跳转的时候必须去掉跳转路径前面的“/”
//resp.sendRedirect("/tow"); //错误的
resp.sendRedirect("tow");
12 为什么需要会话跟踪?什么是会话跟踪?四种会话跟踪技术?
使用浏览器发送的http请求,使用的是http协议完成请求发送,而http协议是一种无状态的协议,它不会去主动记录使用这个http协议的用户是谁,一旦请求发送成功,服务器做出响应以后,那么此时浏览器与服务器之间的链接就会消失,这时服务器就不知道请求来自哪里,是谁发送来的。所以这时我们就需要记录/保存请求/链接的状态,实现这个记录记录/保存请求/链接的状态的过程就叫会话跟踪。
URL重写:URL地址重写的原理是将该用户Session的id信息重写到URL地址中,以便在服务器端进行识别不同的用户。URL重写能够在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。
https://blog.csdn.net/qq_33098039/article/details/78184535?sessionid=123456
将会标识用户的一个编号,跟随在每一个http请求中,用于让服务器认识这个用户。
隐藏表单域:将用户Session的id信息添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示,浏览时看不到,源代码中有。
Cookie:Cookie是Web服务器发送给客户端的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将Cookie发送到客户端,在客户端可以进行保存,以便下次使用。服务器创建保存于浏览器端,不可跨域名性,大小及数量有限。客户端可以采用两种方式来保存这个Cookie对象,一种方式是 保存在 客户端内存中,称为临时Cookie,浏览器关闭后 这个Cookie对象将消失。另外一种方式是保存在客户机的磁盘上,称为永久Cookie。以后客户端只要访问该网站,就会将这个Cookie再次发送到服务器上,前提是 这个Cookie在有效期内。 这样就实现了对客户的跟踪。Cookie是可以被禁止的。
session:每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。保存在服务器端。需要解决多台服务器间共享问题。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户。
Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效。
13 Session和Cookie区别?
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
应用场景:
记住账号密码一般在cookie中,购物车的实现一般也是cookie。
私人信息及登陆验证信息在session中。
14 HttpSession的常用方法?
在上面的这个例子中我们通过Redirect从OneServlet跳转到TowServlet的时候无法在TowServlet中得到在OneServlet的这个请求对象中保存的数据。我们如果采用Redirect跳转,那么该如何在两个Servlet中传递数据???
我们可以使用HttpSession接口对象在两个Servlet中传递数据。
HttpSession接口—表示一个会话对象【同一个用户所发出的一系列请求】
通过HttpServletRequest对象调用getSession(),就可以得到HttpSession接口对象。
HttpSession接口对象.setAttribute(arg0, arg1)—将数据保存到HttpSession对象
HttpSession接口对象.getAttribute(String)–从HttpSession对象获取指定的数据
HttpSession接口对象.removeAttribute(arg0);–从HttpSession对象移除指定的数据
例如:
package com.click369.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class OneServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("OneServlet---doPost");req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");HttpSession session=req.getSession();session.setAttribute("myname", "张三疯");//req.getSession().setAttribute("myname", "张三疯");resp.sendRedirect("tow");}
}package com.click369.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class TowServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("TowServlet---doPost");req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");HttpSession session=req.getSession();String value=(String)session.getAttribute("myname");System.out.println("TowServlet==msg=="+value);}
}
15 Get与Post的区别?
1、url可见性:
get,参数url可见;
post,url参数不可见
2、数据传输上:
get,通过拼接url进行传递参数;
post,通过body体传输参数
3、缓存性:
get请求是可以缓存的
post请求不可以缓存
4、后退页面的反应
get请求页面后退时,不产生影响
post请求页面后退时,会重新提交请求
5、传输数据的大小
get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。
6、安全性
这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。
Servlet-个人归纳总结相关推荐
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
写在前面: 本文是转自:http://www.oschina.net/question/12_52027 的文章,如果要求删除,第一时间联系我立即删除! Web框架是开发者在使用某种语言编写Web应 ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- 初学Java Web开发,请远离各种框架,从Servlet开发
[转载自红薯,原帖地址]http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类--Web框架,该分类中包含多种编程语言的将近500个项目. ...
- java webservice接口开发_给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)
J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面 ...
- SpringMVC-Helloworld 的归纳理解
前面使用SpringMVC写了Helloworld, 发现理解不是很深刻,很多东西只是跟着教学视频敲才会 现在那Helloworld以及一般的SpringMVC归纳一下: SpringMVC入门Hel ...
- JAVA Servlet API简介及接口与类的用法
本章介绍了Java Servlet API中的主要的接口与类的用法,并且介绍了它们的生命周期.表4-1 对接口与类的作用与生命周期作了归纳.这些接口与类的生命周期都由Servlet容器来控制,容器会在 ...
- Servlet入门总结
一.了解Servlet的概念 Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容.Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能.Ser ...
- Javascript + Servlet的鸿沟如何抹平以构建富客户端应用?[SOS]
在Silverlight的世界中,RIA Service + Silverlight可以无缝的进行集成,如有一个实体对象和关联的复杂子对象,在这里可以非常简便的实现: 1.构建公用的Domain Cl ...
- 关于Servlet报错:405 HTTP method GET is not supported by this URL问题解决方法
在编写一个项目的某个Servlet时候,在运行时候,报出了错误 405 HTTP method GET is not supported by this URL,在通过查询,得到大家很多解决方法,为了 ...
- 重学JavaWeb —— Servlet,简单全面一发入魂
文章目录 Servlet 概述 基本使用 两个重要对象 请求转发 会话技术 Cookie Session 对比小结 其它相关对象 ServletContext ServletConfig 过滤器 概述 ...
最新文章
- 编程中new[]和delete[]应该如何使用?
- 编译安装PHP 时遇到问题解决方法.
- 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
- 南邮CTF密码学write up
- python2.7.12操作Hbase
- 数据结构排序法之鸡尾酒排序法he快速排序法
- php代码最佳实践,分享几个 PHP 编码的最佳实践
- 获取linux命令硬盘信息,Linux下如何获取磁盘信息
- 寻虫记:BOM头制造的冤案,无故多出空白行
- 图论--哈密顿路与欧拉路
- 分类问题——逻辑回归与XGBoost
- deep-daze给你一个五彩斑斓的黑
- 计算机论文的技术路线图,怎么写好论文开题报告技术路线流程图
- 吱呦app-想法-交友软件
- 手机罗盘(指南针)校准方法
- tomcat错误“Attribute value is quoted with which must be escaped when used within the value”
- 啊哈添柴挑战Java1222. 输出菱形
- PhotonServer教程《五》
- [ERP]ERP项目实施过程中的致命过失
- 五洲国际打造大数据生态圈