欢迎光临散文网 会员登陆 & 注册

教程揭秘 | 动力节点内部Java零基础教学文档第七篇:servlet(2)

2023-11-07 09:57 作者:动力节点  | 我要投稿

接上期后续

本期分享第七章节

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

第三篇章

相关知识~

下期见!


教程揭秘 | 动力节点内部Java零基础教学文档第七篇:servlet(2)的评论 (共 条)

分享到微博请遵守国家法律