教程揭秘 | 动力节点内部Java零基础教学文档第七篇:servlet(2)
接上期后续
本期分享第七章节
servlet
第二篇章
已经分享过半了,你们都跟上了吗?
每天都在学习嘛?
有什么不会的嘛?
今日教学文档分享来了

今日新篇章
【Servlet】
1. 工程结构

2. J2EE平台
Java EE,Java平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为Jakarta EE。是Sun公司为企业级应用推出的标准平台。Java平台共分为三个主要版本Java EE、Java SE和Java ME。
Sun公司在1998年发表JDK1.2版本的时候,使用了新名称Java 2 Platform,即“Java2平台”,修改后的JDK称为Java 2 Platform Software Developing Kit,即J2SDK。并分为标准版(Standard Edition,J2SE),企业版(Enterprise Edition,J2EE),微型版(MicroEdition,J2ME)。J2EE便由此诞生。
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME。
随着Java技术的发展,J2EE平台得到了迅速的发展,成为Java语言中最活跃的体系之一。现如今,J2EE不仅仅是指一种标准平台,它更多的表达着一种软件架构和设计思想。
2.1 J2EE平台组件
Java EE是一系列技术标准所组成的平台(一系列规范),包括:
1.Applet - Java Applet
2.EJB - 企业级JavaBean(Enterprise Java Beans)
3.JAAS - Java Authentication and Authorization Service
4.JACC - J2EE Authorization Contract for Containers
5.JAF - Java Beans Activation Framework
6.JAX-RPC - Java API for XML-Based Remote Procedure Calls
7.JAX-WS - Java API for XML Web Services
8.JAXM - Java API for XML Messaging
9.JAXP - Java XML解析API(Java API for XML Processing)
10.JAXR - Java API for XML Registries
11.JCA - J2EE连接器架构(J2EE Connector Architecture)
12.JDBC - Java数据库联接(Java Database Connectivity)
13.JMS - Java消息服务(Java Message Service)
14.JMX - Java Management
15.JNDI - Java名称与目录接口(Java Naming and Directory Interface)
16.JSF - Java Server Faces
17.JSP - Java服务器页面(Java Server Pages)
18.JSTL - Java服务器页面标准标签库(Java Server Pages Standard Tag Library)
19.JTA - Java事务API(Java Transaction API)
20.JavaMail
21.Servlet - Java Servlet API
22.StAX - Streaming APIs for XML Parsers
23.WS - Web Services
3. servlet
Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
3.1 Servlet的作用
Servlet是服务端的一个小程序,程序其作用只有2个:
3.1.1 获取客户的请求信息
Servlet获取客户端的请求信息,基于ServletRequest对象,ServletRequest的子接口: HttpServletRequest。
HttpServletRequest这个接口包含:客户端的请求参数,客户端的请求头信息。
3.1.2 向客户端做出响应
Servlet向客户端做出响应,基于ServletResponse对象,ServletResponse的子接口:HttpServletResponse。
HttpServletResponse这个接口:获取输出流(字节流,字符流),向客户端返回响应头信息。
3.2 Servlet的使用方式
3.2.1 创建Servlet的3个步骤
步骤
导入servlet-api.jar
在tomcat的lib文件夹下也有此jar包,开发过程中为防止报错需要导入,实际运行时需要移除此jar包避免版本冲突。
自定义类继承HttpServlet 继承后,重写doGet、doPost方法。
配置虚拟路径 1)可以通过注解配置 2)通过xml形式配置
3.2.2 使用注解形式
JavaWeb开发中,Servlet开发配置相对繁琐。在web3.0之后,提供一些简化web配置的数据,@WebServlet就可以取代在web.xml中对servlet的配置。
3.2.3 使用xml形式
向服务器注册这个Servlet,servlet是要提供服务的
1.声明/定义servlet类
2.servlet提供服务访问方式
3.2.4 两种配置形式区别
平时开发中能用注解形式则用注解形式。但如果类是第3方的,由于我们不能去修改第3方的源代码,无法在类上添加注解,则使用xml形式最为合适。例如:后期SpringMVC框架中的核心类DispatcherServlet就是使用的xml形式作为配置。
3.2.5 通过Servlet输出html标签等富文本信息
3.3 为什么使用tomcat加载类,而不是使用JDK自带的加载器加载
JDK自带的类加载器3个,双亲委派.bootstrap类加载器,加载JDK核心类.Ext 扩展类加载器,加载默认ext目录相关类.application类加载器加载当前项目的类.双亲委派加载机制,避免重复加载,其次为了安全.因为开发者可以自定义类的包名,如果定义一个与系统包名同名的类,自定义的类会覆盖系统的类,可能到导致系统不安全.但是如果tomcat也使用双亲为加载机制加载,会导致如果多个web项目,其中类的名臣完全相同,但是实现不同就出现覆盖.tomcat通过打破双亲委派加载机制,做到了类在应用级别隔离.
3.4 Servlet的生命周期(重点)
Servlet的生命周期,是指Servlet的实例的创建到到销毁的过程。
代码示例:
Tomcat服务器在加载servlet类时,默认是不会创建对象的.只有在servlet实际被使用时,才会去创建对象,tomcat提供了init方法,供开发者进行对象属性的设置,所以该方法被称之为对象初始化方法.
每次访问时,具体的访问业务,tomcat会将访问的数据进行封装,封装为HttpServletRequest对象和HttpServletResponse对象,然后调用service方法.
当tomcat服务器停止时,又会去调用destroy方法.开发者,在这个方法中释放资源,留遗书.
init方法执行一次,如果在配置中配置load-on-startup,则tomcat在启动时就会创建servlet对象,调用init方法.
service方法,会执行多次,只有有请求就会执行service方法.请求数据会被封装到HttpServletRequest对象中,响应数据会被封装到HttpServletResponse对象中。
destroy,servlet对象销毁方法,当tomcat服务器停止时调用.可以释放资源.
3.5 Servlet线程安全问题
Servlet本质是单例模式,如果存在多个并发请求,所有请求使用同一个对象,如果请求中使用了对象的成员变量,则可能出现数据不一致的情况,servlet是非线程安全的.
解决方案:
1. 不要在servlet使用成员变量.
2. 使用ThreadLocal,线程局部变量存储当前线程自己的数据.
3.6 Servlet初始化参数配置
3.7 Servlet的Api
3.7.1 Servlet的请求Api
3.7.1.1 获取请求行数据
3.7.1.2 请求头数据
3.7.1.3 获取网络信息
3.7.1.4 请求参数
3.7.1.5 Servlet内部转发
Servlet内部转发是指当前servlet将请求和响应信息移交其他的servlet进行处理.对于请求方而言,只需要请求一次,但是实际上经历多个具体servlet(具体次数要看实际的转发次数).浏览器的URL地址不会发生变化,并且servlet之间可以进行参数传递操作.
这种内部转发的方式,由于将请求对象进行了传递,在实际开发中使用的比较多的.但是又由于URL地址没有发生变化,所以一旦浏览器进行刷新操作,之前所有相关的程序会重新执行.首先会导致无意义资源消耗,其次可能导致脏数据.
能不使用内部转发就不要使用内部转发.
3.7.2 Servlet的响应Api
在servlet中,请求对象和响应对象是成对出现的.哪怕没有数据的响应数据,tomcat服务器会先为每一个请求对象创建相应的响应对象,只是响应内容默认空的.在实际操作中,只需要向响应对象中提供数据即可.
3.7.2.1 响应对象的核心Api
HttpServletResponse核心api就是获取输出流.由于输出的数据可能是字符串也可能是字节.提供两个方法,但是注意,两个输出流实际使用只能使用其中的一个.
3.7.2.2 重定向和内部转发
3.7.2.3 向响应头添加数据
3.8 html与servlet相互跳转总结
描述
html跳html
a标签、js(location.href=’xxx’)、form表单的action属性
html跳servlet
a标签、js(location.href=’xxx’)、form表单的action属性
servlet跳html
重定向:response.sendRedirect("/页面路径");
转发:request.getRequestDispatcher("/views/demo3.jsp").forward(request,response);
servlet跳servlet
推荐重定向
3.8.1 练习1
demo1.html---->点击a标签----->demo2.html------>OneServlet------>TwoServlet----->demo3.html
3.8.2 练习2
demo1.html-------->不做任何点击跳------->demo2.html------->点击a标签------>demo3.html----->
不做任何点击----->OneServlet---------->TwoServlet------->demo4.html----->点击button按钮---->跳demo1.html
3.9 用户登录案例
用户在界面输入用户名和密码,servlet接收用户输入的用户名和密码,与数据库中的用户信息进行对比,如果用户名和密码都正确.跳转到登录成功页面,否则返回登录页面.
3.9.1 技术点
前端界面:HTML.数据存储:mysql.访问数据库使用JDBC.接收用户数据使用servlet.
3.9.2 前期准备
3.9.2.1 数据库准备
创建数据库erp
创建用户表user
3.9.3 导入相关jar包
mysql驱动包

3.9.4 引入相关的工具类
3.9.4.1 数据库配置文件
3.9.4.2 BaseDao
3.9.4.3 DButil
3.9.4.4 PageInfo
3.9.5 数据操作类-dao
3.9.5.1 UserDao
3.9.6 数据控制类-servlet
3.9.6.1 UserServlet
3.9.7 前端页面
3.9.7.1 登录页面-index.html
3.9.7.2 登录成功页面-success.html

更多干货我们下期再说!
下期会分享
第七章节
servlet
第三篇章
相关知识~
下期见!
