Servlet零基础学习指南
Servlet常用的Web服务器IISApacheNginxTomcatJetty通常的动态网页技术CGI (Common GateWay Interface)API常用的有(NSAPI,ISAPI)ASP(Active Server Page)PHP(Personal Home Page)JSP/Servlet (Java Se...
·
Servlet
- 常用的Web服务器
- IIS
- Apache
- Nginx
- Tomcat
- Jetty
- 通常的动态网页技术
- CGI (Common GateWay Interface)
- API常用的有(NSAPI,ISAPI)
- ASP(Active Server Page)
- PHP(Personal Home Page)
- JSP/Servlet (Java Server Page)
- tomcat目录结构
- bin/ 二进制可执行文件和脚本
- catalina start stop
- catalina debug run exit
- common/ Catalina本身和web应用可加载的类目录
- conf/ 配置文件目录
- logs/ 日志目录
- server/ 服务器所需的类库目录
- shared/ Web App共享的类库
- webapps/ Web应用所存放的目录applications
- work/ Tomcat的工作目录(存放jsp产生的class文件)存储缓存信息(可清除)
- temp/ 存放临时产生
- bin/ 二进制可执行文件和脚本
- conf/server.xml
服务器的主配置文件 - conf/web.xml
定义所有Web应用的配置- (缺省的Servlet定义和MIME类型定义)
- conf/tomcat-user.xml
- 定义了tomcat用户的信息(用于权限与安全)
- 管理Tomcat下的所有项目,首先要给权限
- <role rolename="manager-gui"/>
- <user username="manager" password="123456" roles="manager-gui" />
- servlet概述
- 服务器端运行的java程序
- 放置在web 容器中(tomcat, weblogic, webshare…)
- 由容器进行管理
- servlet –>容器(java) –>jvm
- servlet的基本的开发流程
- 三种servlet代码的开发方式
- 实现servlet接口
- 覆盖service方法
- 继承GenericServlet
- 覆盖service方法
- 继承HttpServlet
- 覆盖doGet()方法
- 覆盖doPost()方法
- doGet浏览器使用get传输
- doPost浏览器使用post传输
- 实现servlet接口
- 建议使用:继承HttpServlet
- 三种servlet代码的开发方式
- Get请求和Post请求的区别
-
GET
POST
传输方式
地址栏提交,a标签
Form表单 method=”post”
地址栏是否可见
可见url?username=abc&password=aaa
不可见
大小
有限
无限
根本区别
读取数据
改写服务器数据
-
- 委托
- doPost()请求里面调用了doGet()方法,委托给了doGet()去执行
- Servlet3.0以前比如2.0模式
- 需要使用在web.xml中配置映射信息,将url地址对应到Servlet类。
- Servlet3.0需要的是注解完成配置。
- 例如:
- @WebServlet("/life.action")
- 直接将该注解写在类上就可以了
- 例如:
- Servlet的生命周期
- 加载ClassLoader
- 实例化Servlet对象
- 初始化:init(ServletConfig)
- 处理请求:service方法
- 调用:doGet请求或者doPost请求
- 退出服务:destory()
- Servlet的访问流程:
- 获取表单信息
- 通过HttpServletRequest的getParameter()方法来获得客户端传递过来的数据
- getParameter()方法返回一个字符串类型的值
- getParameterNames()返回Enumeration类型的值,
- getParameterValues()返回一个字符串数组
- 通过HttpServletRequest的getParameter()方法来获得客户端传递过来的数据
- 设置中文编码
- request.setCharacterEncoding("utf-8");//请求
- response.setCharacterEncoding("utf-8");//服务器给客户端响应
- 设置响应的结果是什么文本类型
- response.setContentType("text/html");
- 使用GET方式提交
- 请求 String userName = new String(userName.getBytes("iso-8859-1"),"utf-8");
- Tomcat 官方API
- http://tomcat.apache.org/tomcat-8.0-doc/
- Servlet官方API
- http://tomcat.apache.org/tomcat-8.0-doc/servletapi/index.html
- JSP 官方API
- 会话跟踪
- Http协议的无连接性要求出现一种保存C/S间状态的机制
- Cookie
- Cookie:保存到客户端的一个文本文件,与特定客户相关
- Cookie以“名-值”对的形式保存数据
- 创建Cookie:new Cookie(name,value)
- 可以使用Cookie 的setXXX方法来设定一些相应的值
- Session
- 会话,在某段时间一连串客户端与服务器端的“交易”。
- 可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。
- 通过HttpSession来读写Session
- 在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234
- Cookie和Session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
- 建议:
- 将登陆信息等重要信息存放为SESSION
- 其他信息如果需要保留,可以放在COOKIE中
- Session的常用方法:
- Session获取:request.getSession();
- 设值:session.setAttribute(key,value);
- 取值:session.getAttribute(key);
- 客户端和服务器有对应的SessionID
- 客户端向服务器端发送SessionID的时候两种方式:
- cookie(内存cookie)
- rewriten URL
- 客户端向服务器端发送SessionID的时候两种方式:
- Application
- 用于保存整个WebApplication的生命周期内都可以访问的数据
- 在API中表现为ServletContext
- 通过HttpServletRequest的getServletContext方法可以拿到
- 通过ServletContext的 get / setAttribute方法取得/设置相关属性
- 转发
- RequestDispatcher接口对象允许将请求转发到其他服务器资源
- 通过RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)方法可以将请求转发
- 重定向
- 使用HttpServletResponse的sendRedirect(目标地址) 方法。
- 转发和重定向的区别
- 两者的概念
- 转发是服务器行为,重定向是客户端行为。
- 转发(Forword)通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。
- 重定向(Redirect) 是利用服务器返回的状态吗来实现的。
- 区别,多种角度:
- 从地址栏显示来说
- forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
- redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。
- 从数据共享来说
- forward:转发页面和转发到的页面可以共享request里面的数据。
- redirect:不能共享数据。
- 从运用地方来说
- forward:一般用于用户登陆的时候,根据角色转发到相应的模块。
- redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等。
- 从效率来说
- forward:高。
- redirect:低。
- 从地址栏显示来说
- 两者的概念
- Servlet多线程机制
- Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
- 当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。
- Servlet容器会自动使用线程池等技术来支持系统的运行
- MVC模型
- 视图(JSP,HTML,VUE,ASP…)
- 职责:
- 数据显示
- 发起请求(人机交互)
- 减少业务逻辑
- 职责:
- 控制器(Servlet)
- 职责:
- 获取前端的数据
- 页面跳转
- 创建Model层的引用
- 创建service层对象
- 职责:
- Model(业务模型)
- service + dao
- 过滤器
- 为什么使用过滤器
- 对于项目中公共功能的统一处理。
- 使用过滤器的好处
- 提高代码阅读性
- 减少代码冗余
- 提高代码的灵活性
- 提高代码的可扩展性
- 如何创建过滤器
- 实现Filter接口
- 实现doFilter方法
- chain.doFilter(request, response);执行下一个filter直到目标对象位置
- 注册过滤器
- 过滤器的原理
- 在容器中对请求和响应进行拦截的一个特殊java类
- Filter构成一个链式结构
- 到达servlet/静态资源 进行拦截
- 去:对request拦截
- 回:对response拦截
- 可以有多个过滤器,联合操作
- 每个过滤器实现一个功能,可以避免每个servlet重复编写同样的代码。
- 过滤器的应用场景
- 权限管理
- 日志
- 中文乱码处理
- 类型转换
- 等等…
- 为什么使用过滤器
- 404页面处理
- 在web.xml中配置
- <error-page>
- <error-code>404</error-code>
- <location>/404.html</location>
- </error-page>
- <error-page>
- 在web.xml中配置
- 监听器
- web监听:监听某个对象的某个动作,类似于swing中的监听。
- 常用的监听器对象
- ServletRequest
- HttpSession
- ServletContext
- 如何实现监听器
- 实现监听器接口:ServletContextListener
- 容器启动,监听器创建
- 容器关闭,监听器销毁
- 如何销毁session
- 使用方法invalidate()
- 使此会话无效,然后解绑定到它的任何对象。
- 将Session的最大时间设为0
- 使用方法invalidate()
更多推荐
所有评论(0)