Servlet

servlet概述

Servlet是SUN公司定义的接口,是web server和java web之间的规范,是一门JAVA语言开发的动态网站技术
Servlet规范的作用是:解耦合
web server遵循servlet规范,java web遵循servlet规范,java web开发的应用软件可以在不同的web server上部署

参与的角色

一共四种角色:
浏览器软件的开发团队:谷歌,火狐,IE等等
WEB Server(网站服务器)的开发团队:Tomcat,jBOSS,Jetty等等
DB Server(数据库服务器)的开发团队:MySQL.Oracle等等
webapp的开发团队:WEB应用是我们Javaweb程序员开发

不同角色之间要遵循的协议和规范

浏览器开发团队和web server开发团队:http协议,是w3c(世界万维组织)制定的
web server开发团队和webapp开发团队:Servlet规范,是SUN公司制定的
webapp开发团队和DB server开发团队:JDBC规范,是SUN公司制定的

不使用idea开发步骤

搭建项目的骨架目录,文件
1.在webapps目录下创建目录crm,crm是项目名
2.在crm目录下创建目录WEB-INF,Servlet规范规定目录名必须是WEB-INF,全部必须大写,一模一样
3.在WEB-INF目录下创建目录classes,Servlet规范规定目录名必须是classes,全部必须小写,一模一样,存放的是编译后的class文件
4.在WEB-INF目录下创建lib目录,这个目录不是必须存在的,存放的是第三方的jar包,目录名字必须是lib全部小写
5.WEB-INF目录下创建配置文件web.xml,这个文件是必须要有的,位置必须在这里,描述了请求路径和Servlet实现类之间的映射关系,直接从webapp其他应用程序下拷贝过来,里面有内容,不要手写!
跟WEB-INF同级目录下可以创建前端语言的文件,HTML,CSS,javascript,image等等
-------------------以上基本骨架搭建完成------------------------
6.编写servlet实现类,完成业务,导入servlet的jar包和JSP的jar包
关于javaEE改版问题
JavaEE最高版本是8,之后Oracle把这个规范权限捐给了Apache了
Apache把javaEE改名为jakartaEE,9开始叫jakartaEE9
8版本Servlet包是javax.servlet.Servlet,9版本类库是jakarta.servlet.Servlet
Java项目部署到Tomcat服务器9版本及9以下的版本依旧识别的JavaEE8的javax,如果是10版本只能识别jakartaEE9的jakarta,所以注意java导入的包是否对应Tomcat版本,不然无法部署成功!
7.编译java程序,发生错误的原因是导入的包没有找到,解决办法是配置环境变量classpath,把tomcat下的Servlet.jar包作为值,.;路径,在编译即可
8.把编译好的class文件复制到webapps下WEB-INF下的classes目录
9.在web.xml文件里编写配置信息,映射请求路径和Servlet类名的关系,专业术语是注册Servlet类
任何servlet都对应一个servlet-mapping
servlet-name可以随便写,但是上下的得相同
servlet-class的路径:在classes目录下创建com目录下创建servlet目录下有TestServlet.class文件
url-pattern目前自己随便设置,以斜杠/开始不加项目名
10.在HTML文件随便写个超链接,URL路径跟xml配置文件相同,但是要加项目名,启动tomcat
11.打开浏览器地址栏输入URL
URL必须和web.xml配置文件的url-patter一致,浏览器地址栏输入的URL带有项目名,配置文件配置的URL没有带项目名!
我们可以通过前端HTML页面的超链接来访问资源,链接带项目名,这个页面的位置必须在webspps里,WEB-INF目录外面
最后:以后不再需要我们编写main方法了,Tomcat服务器启动负责调用main方法,我们javaweb开发只需要干两件事,1.编写Servlet实现类,2.注册到web.xml配置文件即可!

搭建Javaweb项目的目录结构


要求:web目录只要在项目下就行,可以跟src同级,也可以在Java目录下!

使用idea开发Servlet

1.创建new project空项目,进入idea创建普通java模块,之后右键模块名Add Framework Support,选择webapp框架
2.导入相关jar包到WEB-INF目录下新建的lib目录下
3.idea导入jar包的方式是打开file下project structrue找到模块,选择Dependencies点击加号导入jar包即可
4.创建实现类实现HttpServlet,编写业务
5.连接数据库需要导入mysql驱动,mysql的jar不属于java程序,导入的方式是在WEB-INF目录下创建lib目录,之后复制mysql驱动到该目录下
6.打开web.xml配置文件,配置好映射关系
7.在web目录下创建html页面,超链接方式获取数据库的数据,实现动态获取资源
8.把项目部署到tomcat服务器,打开右上角的Edit Config…,找到Tomcat Server下的Local,Server界面需要配置下启动服务器后默认打开的浏览器,jre也需要配置,服务器名字可以随便写,之后是Deployment界面,直接点击加号自动导入项目,Application context处填html页面URL的最开始的项目名,比如/projectName
9.启动tomcat服务器,输入HTML页面的URL或者输入项目名下的xx.html访问资源即可!

Servlet对象的生命周期
生命周期是一个对象从出生到死亡的整个过程

Servlet对象每个方法的作用
默认情况下服务器启动不会创建Servlet对象,当用户发送第一次请求时,对应的Servlet才会被创建,过程是先调用了Servlet的构造方法,创建好对象后马上调用了init方法,之后又调用了service方法

用户第二次发送请求时,会直接使用第一次创建好的对象,然后调用service方法,就不会再调用构造方法,init方法了

当关闭服务器的时候,servlet对象会调用destroy方法,作用是销毁内存中的对象,注意只有当方法执行结束了,才销毁对象

init方法:完成初始化,只执行一次
service方法:核心方法,用户发发送请求一次就调用一次
destroy方法:关闭服务器时调用,销毁对象,只执行一次

适配器GenericServlet抽象类

使用适配器模式原因
Servlet有五个方法,最常用的是service方法,另外的几个方法基本很少用,全部方法都实现界面会很丑陋,为了解决这个问题,所以我们有了适配器模式
SUN公司已经定义好了GenericServlet适配器抽象类,实现了Servlet接口和ServletConfig接口,解决了界面丑陋的问题,常用的方法改成抽象方法,实现类继承适配器抽象类重写常用的抽象方法就行了

ServletConfig接口

ServletConfig是Servlet对象的配置信息对象,该对象封装了web.xml配置文件的servlet标签中的配置信息,一个servlet对应一个ServletConfig对象
Servlet对象和ServletConfig对象都是由WEB容器创建和销毁,默认情况下只有当用户发送第一次请求时才会创建
tomcat服务器创建servlet对象调用init方法,参数会传入一个ServletConfig对象
ServletConfig接口的方法
getInitParameter(String name);通过name,获取value
getInitParameterNames();获取所有初始化参数的name
getServletContext();获取ServletContext对象
getServletNama();获取Servlet的name
以上方法在Servlet实现类都可通过this调用,因为实现类继承适配器抽象类,该抽象类实现了Servlet和ServletConfig

ServletContext接口(重点)

ServletContext接口是Servlet规范的一员,在同一个webapp,所有的servlet对象共享一个ServletContext对象,ServletContext对象在web服务器启动的时候创建,关闭的时候销毁
ServletContext对象对应的是整个web.xml配置文件
ServletContext接口的方法
getInitParameter(String name);通过name获取value
getInitParameterNames();获取所有的初始化参数的name
方法是获取的web.xml配置文件里的context-param标签的配置信息
getContextPath();获取应用的根路径
getRealPath(String path);获取文件的绝对路径
log(String messages);记录日志
log(String messages,Throwable t);
ServletContext对象又叫应用域:相当于缓存
满足:数据小,少修改,所有用户共享,这样的数据应该放到应用域

应用域的存,取,删的方法
setAttribute(String name;Object value);存
getAttribute(String name);取
removeAttribute(String name);删

HttpServlet(重点)

最终javaweb编写的Servlet实现类继承的是HttpServlet抽象类,继承关系是GenericServlet抽象类实现了Servlet接口和ServletConfig接口,HttpServlet抽象类继承了GenericServlet抽象类
HttpServlet类是专门为HTTP协议准备的,比GenericServlet更适合HTTP协议下的开发
前端发送的请求是GET,那么后端的方法只能重写doGet方法,否则报405

HttpServletRequest对象

HttpServletRequest接口是Servlet规范的一员,父接口是ServletRequest
HttpServletRequest对象又叫请求域对象,该对象封装了请求协议的全部内容,web服务器将请求协议解析的内容全部封装到HttpServletRequest对象当中
执行service方法会先调用带有ServletRequest对象参数的service方法,在该方法里会调用另一个带有HttpServletRequest对象参数的方法,该方法会根据请求协议的方式决定重写doGet或者doPost方法
HttpServletRequest对象的方法
getParameterMap();获取Map集合
getParameterNames();获取map集合的所有Key
getParameterValues(String name);根据name获取value
getparameter(String name);获取value这个一维数组中的第一个元素

其他常用方法
getRemoteAddr();获取客户端的IP地址
setCharacterEncoding(“UTF-8”);设置请求体的字符集
post请求乱码问题:response.setContentType(“text/html;charset=utf-8”);设置响应的字符集
getContextPath();获取应用的根路径
getMethod();获取请求方式
getRequestURI();获取请求的URI
getServletPath();获取请求的路径,不加项目名
get请求乱码问题:找到CATALINA_HOME下的conf下的server.xml配置文件,connector URIEncoding处设置字符集

请求域对象比应用域对象范围小,生命周期短,请求域只在一次请求有效,请求结束请求域对象就消失了,尽量使用域小的对象,占用的资源更小,域是缓存技术,减少IO流操作,提高效率
请求域对象的三个方法
setAttribute(String name,Object obj);向域中绑定数据
getAttribute(String name);向域中获取数据
removeAttribute(String name);将域中绑定的数据删除

HttpServletResponse对象

该对象是专门用来响应HTTP协议到浏览器的
方法
setContentType(“text/html;charset=utf-8”);设置响应的格式和字符集
PrintWriter out = getWriter();获取输出流的对象
out.print();输出内容到浏览器

最终Servlet开发步骤

第一步:编写实现类继承HttpServlet
第二步:重写doGet或者doPost方法,javaweb程序员决定
第三步:配置web.xml文件
第四步:准备前端HTML页面
第五步:启动web服务器,浏览器地址栏输入网址访问服务器

HTTP协议

HTTP概述

HTTP协议是:W3C万维网组织制定的一种超文本传输协议,所谓超文本就是流媒体,声音,视频,图片等

B/S之间遵循的HTTP协议,作用是解耦合,任意品牌的浏览器可以向任意品牌的服务器以HTTP协议的格式传输超文本

HTTP协议分为请求协议和响应协议
请求协议:浏览器向服务器传输超文本
包含四部分:请求行,请求头,空白行,请求体

响应协议:服务器向浏览器传输超文本
包含四部分:状态行,响应头,空白行,响应体

URL和URI

URL:是统一资源定位符,比如http://localhost:8080/servlet/postServlet
URI:是统一资源标识符,比如/servlet/postServlet
URL包含URI

GET和POST

GET发送请求的信息是在请求行上,显示在浏览器的地址栏上

POST请求发送的信息是在请求体上,不会显示在地址栏
只有在form表单中,method是POST方式,才算POST方式发送请求,其他一律是GET请求方式

当发送的请求是获取数据库的数据时,用GET
当发送的请求是向数据库发送(存储)数据时,用POST
正确使用GET请求和POST请求的情况下:GET请求是安全的,只是为了从服务器获取数据,POST请求是危险的,向服务器提交数据可能会被拦截监听

不管是GET还是POST都是以key,value形式发送

GET请求支持缓存:当用户发送请求时,先在本地缓存找,找不到才去服务器找,缓存机制是为了提高用户的体验
POST请求不支持缓存:响应的结果不会存入缓存,没有意义

web站点的欢迎页面

访问资源的时候默认访问我设置的欢迎页面,一个webapp可以设置多个欢迎页面,优先级是从上往下

欢迎页面可以是静态资源(xx.html),也可以是动态资源(java小程序)

tomcat服务器默认的欢迎页面
文件名是index.html和index.htm和index.jsp其中一个,那么默认的欢迎页面就是这个文件,不需要我们额外自己配置,这个叫全局配置
如果我们自己配置了欢迎页面,那么tomcat的全局配置就失效了,访问的是我们自己配置的欢迎页面,这个叫局部配置,优先级更高
全局配置的位置:conf下web.xml文件里

设置步骤
第一步:idea工具,在web目录下新建xx.html文件
第二步:在web.xml配置文件配置标签welcome-file-list,标签的路径默认从根开始查找,不要以斜号开始,直接写html的文件名字即可,比如xx.html,有目录结构加上即可
第三步:启动web服务器,浏览器输入网址访问即可

转发和重定向

在一个web应用中通过转发和重定向两种方法完成资源的跳转

转发

转发机制
将数据放到请求域当中,AServlet转发到Bservlet,保证两个servlet处于同一个请求
转发的不一定非得是servlet,只要是合法的资源都行,转发的路径以斜杠开始,不能加项目名

获取请求转发器
request.getRequestDISpatcher(“/b”)
调用转发器的forward方法完成转发
转发器对象.forward(request,response)

重定向

重定向的代码
response.sendRedirect(“/项目名/b”);

转发和重定向的区别

转发是一次请求,浏览器的地址栏不会改变,重定向是两次请求,浏览器的地址会改变
转发是request对象调用方法,重定向是response对象调用方法
转发是WEB服务器控制的,重定向是浏览器控制的
转发存在刷新问题,比如向数据库存入数据,刷新几次就重复的存几次
转发不需要加根路径,重定向需要加根路径

关于用转发还是重定向的问题

如果servlet对象在Servlet请求域中绑定了数据,希望从另一个servlet对象中获取绑定的数据,就使用转发机制
剩下的所有情况都使用重定向方式

Servlet注解开发

web.xml配置文件太过于臃肿,以注解的方式替代web.xml配置文件的配置

在Servlet类上使用注解@WebServlet,表示这个类是一个Servlet

@WebServlet注解的属性
name属性:指定servlet的名字
urlPatterns属性:指定servlet映射路径
loadOnStartUp属性:指定服务器启动阶段是否加载Servlet
value属性:作用跟urlPatterns属性一样,但是value属性名可以省略不写
注解的属性是一个数组,当数据只有一个元素,大括号可以省略不写
注解的结构是:key=value,key=value…

关于使用web.xml文件还是注解

如果配置信息经常改变的就写到web.xml,很少变动的用注解方式,注解简化开发

JSP概述

JSP是什么?
JSP是java程序,是一个Servlet规范,web服务器根据规范翻译jsp文件,本质上JSP是翻译引擎,每个web服务器都会内置一个JSP翻译引擎

JSP有什么用?
浏览器在地址栏访问JSP文件的时候,会自动翻译生成Java源文件,自动编译成class字节码文件
自动生成的类继承HttpjspBase类,而HttpjspBase继承HttpServlet类,JSP就是Servlet

JSP怎么用?
调试JSP,直接打开JSP对应的java源文件
JSP文件编写的代码会自动翻译到servlet类的service方法的out.write(“这里”)
在JSP文件编写的前段代码会被JSP当成普通的字符串,响应到浏览器,浏览器会对前段代码进行解析执行
JSP的page指令,设置响应的内容类型:<%@page contentType=“text/html;charset=utf-8”%>
JSP编写Java程序:<%Java语句%>,会翻译到service方法内部,就是在方法体写Java语句
<%! %>,在这里面编写的Java程序会被翻译到service方法外,类体里,就是在类体写java代码,很少用到存在线程安全问题
如果只是前端代码或者普通字符串,可以直接在JSP文件写,不用加<%%>
<%= %>,翻译后就是out.print();有变量的时候使用,动态内容,打印输出

service方法内置的九大对象之一的out,可以直接拿来用

Servlet和JSP的分工

Servlet负责接收请求,写逻辑业务,连接数据库

JSP负责响应处理好的数据

不管是Servlet还是JSP都是web服务器一手操控

JavaWeb(后端)相关推荐

  1. JavaWEB后端支付银联,支付宝,微信对接

    注:本文来源于:<  JavaWEB后端支付银联,支付宝,微信对接  > JavaWEB后端支付银联,支付宝,微信对接 标签(空格分隔): java 项目概述 最近项目需要后端打通支付,所 ...

  2. 华清远见-重庆中心-JavaWeb后端阶段技术总结

    华清远见-重庆中心-JavaWeb后端阶段技术总结 JavaWeb 使用Java开发Web服务的技术,统称为JavaWeb. B/S与C/S模式 B/S:Browser/Server 浏览器/服务器模 ...

  3. Javaweb后端开发必学(HTML、CSS、JS、Vue)

    Javaweb HTML.CSS CSS引入方式 < span >标签 CSS选择器: 页面布局 表格 表单标签 表单项 JavaScript JavaScript引入方式 JS语法 变量 ...

  4. JavaWeb后端开发,数据库知识需要掌握到何种程度?

    一般来说,我们将网站分为前端和后端.前端主要负责页面的展示,后端则是业务逻辑的实现,后端是由一些实现业务逻辑的Java代码和数据库组成.Javaweb做后端,数据库方面需要掌握到哪种程度?我把我能想到 ...

  5. 华清远见-重庆中心-javaweb后端阶段知识点梳理

    JavaWeb 使用Java开发Web服务的技术,统称为JavaWeb. B/S与C/S模式 B/S:Browser/Server 浏览器/服务器模式 用户只需要一个浏览器即可访问服务器 C/S:Cl ...

  6. Javaweb后端技术(上)

    Tomcat 一. Web知识概述 Web(互联网总称) Java Web:是用Java技术来解决相关web互联网领域的技术总和,通俗的说:将编写好的代码,发布到互 联网,可以让所有用户都访问到 1. ...

  7. java service实例,javaweb后端实例 service

    service的作用 1.将前端需要的业务代码封装成接口 2.将do数据封装为vo 3.水平有限只知道这些 下面展示的代码为将do封装为vo public class StationService { ...

  8. JavaWeb 后端 三 之 Response Request 学习笔记

    一.响应对象 Response(重点:HTTP协议响应部分) 查看 HttpServletResponse set是 有这个头 修改 没有添加一个新的 和 add 有点小区别 案例: 1. 字节流向客 ...

  9. Javaweb后端技术(下)02-Mybatis

    目录 Mybatis 任务一:基本应用 一 框架简介 1.1 三层架构 1.2 框架 二 Mybatis简介 2.1 原始jdbc操作(查询数据) 2.2 原始jdbc操作的分析 2.3 Mybati ...

最新文章

  1. 基于python物流管理系统毕业设计-长白高校邦数据科学通识课【Python基础语法】答案...
  2. Android监听程序自身被卸载
  3. 简单搭建一个SSM项目(一)
  4. 用git上传自己的第一个github项目
  5. EasyEarth三维可视化解决方案——智慧园区
  6. 赚钱的基本逻辑就是价值交换
  7. matlab求数的因子,matlab中因子分析的函数factoran如何使用??
  8. MVVM前后分离轻量级框架应用juicer和doT.js
  9. 摘抄:敏捷测试自动化策略
  10. 图像处理中饱和度、色调、对比度的定义
  11. 163邮箱邮件服务器域名,注册申请网易免费域名邮箱服务
  12. javascript之Math
  13. Linux查看内存信息(型号、大小、速率等)
  14. 网页怎么退出全屏,网页退出全屏有哪些快捷键?
  15. 佐治亚大学计算机科学与工程,2019上海软科世界一流学科排名计算机科学与工程专业排名佐治亚大学排名第401-500...
  16. JAVA团队开发手册 - 1.环境搭建
  17. 【visual studio】VsVim 2022
  18. warning C4996的分析
  19. 中国第一大手机操作系统已有过亿用户,不是华为鸿蒙
  20. 学生考勤系统设计c语言源程序文件的后缀是,C++学生考勤系统(含源代码).doc

热门文章

  1. 【密码学基础】03 传统加密技术
  2. os.listdir(path)
  3. 现代控制理论课件分享及课后思考题(初稿待完善)
  4. getc与fgetc的区别
  5. Win10安装程序报错2503和2502错误解决方案
  6. 如何优雅的在ubuntu终端中使用复制粘贴
  7. 文章详情页文章评论功能
  8. 【CNC——第12篇】用Turbo PMAC驱动一个松下交流伺服电机以及I变量知识
  9. DSP模型中FM FFM模型
  10. 计算机英语词汇大全pdf,计算机英语(编程词汇大全).pdf