整体介绍
了解Browser-Server(B/S)模式 掌握Servlet开发技巧 掌握Servlet执行原理
软件结构发展史
◆单机时代-桌面应用 ◆联机时代(Client-Server模式) ◆互联网时代(Browser-Server模式)
单机时代-桌面应用
桌面应用俗称单机应用,软件所有数据都保存在电脑本地硬盘中 ◆优点:易于使用,结构简单 ◆缺点:数据难以共享、安全性差、更新不及时 如office word
联机时代(Client-Server模式)
◆Client/Server结构(C/S结构)是指客户端和服务器结构,数据存储在 服务器,客户端与服务器通信即可 ◆优点:数据方便共享,安全性高 ◆缺点:必须安装客户端,升级与维护困难 如qq、微信、支付宝
互联网时代(Browser-Server模式)
◆Browser—Server(B/S)模式即浏览器和服务器架构模式 ◆优点:开发简单,无需安装客户端,数据易于共享 ◆缺点:相较于C/S模式,执行速度与用户体验相对较弱 如各大网站、手机淘宝、京东,嵌入的只是浏览器网页
Tomcat和Servlet
B/S模式执行流程
然后服务器生成文档
请求与响应
◆从浏览器发出送给服务器的数据包称为“请求(Request)’’ ◆从服务器返回给浏览器的结果称为”响应(Response)”
J2EE是什么
◆J2EE (Java 2 Platform Enterprise Edition) “Java 2企业版” ◆开发BS(Web)应用程序就是J2EE最核心的功能 ◆J2EE由13个功能模块组成
J2EE中13个功能模块
Apache Tomcat
◆Tomcat是Apache软件基金会旗下一款免费的开放源代码的Web应用服务器程序。 用来在服务器端动态生成网页,个人电脑能安装阿帕奇,电脑就会变成一台web应用程序服务器
J2EE与Tomcat的关系
◆J2EE是一组技术规范与指南,具体实现由软件厂商决定 ◆Tomcat是J2EE Web(Servlet与JSP)标准的实现者 ◆J2SE是J2EE运行的基石,运行Tomcat离不开J2SE J2SE有JRE、JDK等
Servlet
Tomcat提供硬件基础,Servlet提供软件的实现
◆Servlet(Server Applet)服务器小程序,主要功能用于生成动态Web内容 ◆Servlet是J2EE最重要的组成部分,也是我们学习的重点
Tomcat与Servlet的关系
第一个Servlet
IDEA配置Servlet的坑如下: 2022IntelliJ IDEA 创建Servlet最最最新方法IDEA版本2021.2.2(超详细)附加tomcat (69条消息) IDEA右键创建servlet,没有servlet选项的解决办法
最后,记得Tomcat添加工件进行部署,若找不到对应工件,请在文件→项目结构→工件中进行添加和改名 (69条消息) IDEA中配置Tomcat中的Artifact(工件)
记得标准输出在webapps目录下 (69条消息) IDEA中修改web项目部署的路径为tomcat中的webapps下
在com.imooc.servlet.FirstServlet路径下的FirstServlet.java文件
请选择热更新,就不用多次启动tomcat了,注意,在运行环境下只能更新html等文件,在调试环境下能更新java文件,所以,请选择调试模式
Web.xml文件:
访问域名为:
http://localhost:8080/FirstServlet/hi
?name=HelloWorld是手动在网址栏输入的,后面输入的数据是FirstServlet.java文件需要的参数,能够实现动态网页
因为servlet与url绑定,通过/hi路径查找到servlet-name的别名为first,然后在<servlet>标签队中匹配到first从而得知路径为com.imooc.servlet.FirstServlet,从而访问到FirstServlet.java文件,进行处理
执行流程总结
标准Java Web工程结构
直接在web目录下新建html等文件即可,运行部署会自动发布在tomcat的webapps目录下
Servlet开发与基本配置
Servlet开发步骤
◆创建Servlet类,继承HttpServlet ◆重写service方法,编写程序代码 ◆配置web.xml,绑定URL
Service 方法:
不管是 get 方式还是 post 方式的请求,如果 Servlet 类中有service 方法,则优先调用 Service 方法。
doGet 方法:
在没有 service 方法的情况下如果是 get 方式的请求所调用的处理请求的方法
doPost 方法:
在没有 service 方法的情况下如果是 post 方式的请求所调用的处理请求的方法
注意:
servlet中没有声明service方法,会根据请求方式调用对应的方法进行请求处理,如果在servlet中没有声明对应的请求处理方法,则会报405错误。
Tomact服务器其实只认识service方法,如果我们自己声明的servlet中没有覆写service方法,则会执行HttpServlet的service方法,而HttpServlet中的service方法会根据请求方法调用对应的doXX()方法执行请求处理。
src是源代码目录 Web是发布在tomcat的资源目录 在src的目录下创建Servlet类,继承HttpServlet
public class FirstServlet extends HttpServlet {}
HttpServlet是Sevlet的核心类,里面定义了核心方法
需要重写里面的service方法
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {书写语句}
不用单独写doGet与doPost,改名即可
HttpServletRequest request 代表从浏览器发来的请求 HttpServletResponse response 代表服务器发送给浏览器的响应 都需要引入相应的包
PrintWriter out=response.getwriter();//向浏览器输出的数据流
.getwriter方法需要throws IOException 抛出相应异常
输出自己希望看到设计页面
out.println("<a href='http://www.baidu.com'>Baidu</a>");
此时tomcat不知道这是一个Servlet,需要在web.xml中配置
Servlet访问方法
◆http://IP地址:端口/context—path/url-mapping ◆远程访问使用IP地址,本地访问localhost(127.0.0.1) ◆context-path成为”上下文路径”,默认为工程名
请求参数的发送与接收
请求参数
◆请求参数是指浏览器通过请求向Tomcat提交的数据 ◆请求参数通常是用户输入的数据,待Servlet进行处理
◆参数名1=值1&参数名2=值2&参数名n=…
新加入的html文件如何与之前写的servlet进行联动? 在web目录下加入student.html文件
在form标签对加入action=“http://LocaLhost:8080/FirstServlet/hi” 可以只保留/FirstServlet/hi这一部分 表示表单提交以后发送的地址是什么 在浏览器中输入localhost:8080/FirstServlet/student.html访问
在代码处有
value的地方就是勾选后发送的值 勾选相应数据
然后跳转,注意浏览器链接变化
Servlet接收请求参数
◆request.getParameter()-接收单个参数 ◆request.getParameterValues()-接收多个同名参数
获取单个请求参数:
String name = request.getParameter(“name”); 然后结果输出 out.println(“<h1>name:“+name +”</h1>”); 如上面接收name,变成hi,yzyl! 此处变为name:yzyl 同理,输出多个参数:
String[] specs = request.getParameterValues(“spec”); 因为复选框可以勾选多个,所以使用getParameterValues,用for打印输出
Get与Post请求方法
◆Get方式是将数据通过在URL附加数据显性向服务器发送数据。 http://lccalhost:8080/FirstServlet/hi?name=yzyl ◆Post方式会将数据存放在”请求体”中隐性向服务器发送数据 · http://localhost:8080/FirstServlet/hi · 请求体:name=yzyl
在form标签添加method方法
<form action=“http://LocaLhost:8080/FirstServlet/first method = “post”> 结果不变,但url地址栏没有请求体,只有http://localhost:8080/FirstServlet/hi
post方式:
get方法:
可以看出,表单数据变成了查询字符串参数,而且出现请求体
service是请求处理的核心方法,无论是get或者post都会被service()方法处理
获取是哪种请求方法:
String methodName = request.getMethod();
out.println("<h1>method:+"methodName +"</h1>");
因为Get和Post方法处理逻辑不同,需要分开处理,service方法的权限太大,所以需要专门处理这两种方法 doGet()和doPost()两种方法,看上面代码块 我们可以同时分别处理这两种方式,只要更改method即可,而不用service同时处理
Get与Post处理方式
◆所有请求-service()方法 ◆Get请求-doGet()方法 ◆Post请求-doPost()方法
Get与Post应用场景
◆Get常用于不包含敏感信息的查询功能 例如https:/www.baidu.com/s?wd=imooc&rsv_spt=1 ◆Post用于安全性要求较高的功能或者服务器的”写”操作 ・用户登录 ・用户注册 ・更新公司账目
Servlet生命周期
◆装载-web.xml ◆创建-构造函数 ◆初始化-init() ◆提供服务-service() ◆销毁-destroy()
重新运行tomcat,输入http://localhost:8080/FirstServlet/hi?name=ooo 查看IDEA输出
浏览器再刷新,不会再创建和初始化,只会
返回给浏览器的响应数据为:<h1 style = 'color:red'>hi,ooo!</h1><hr/>
所以在Servlet全局中,有且只有一个Servlet对象,之后所有请求都只会被这个Servlet对象处理
更改代码后,Tomcat会自动重启部署更新,重启时时就会执行销毁对象,再访问就会重新构造初始化
使用注解简化配置
◆Servlet3.X之后引入了”注解Annotation”特性 ◆注解用于简化Web应用程序的配置过程 ◆Servlet核心注解:@VebServlet
src目录下新建Java类
@WebServlet(“/anno”)表示注解,/anno是访问路径,不用在web.xml中进行配置了 访问路径为http://localhost:8080/FirstServlet/anno
启动时加载Servlet
◆web.xml使用<load-on-startup>设置启动加载 ◆<load-on-startup>0~9999</load-on-startup> 0的优先级最高,多个servlet如果设置了0的Servlet将会被优先加载 ◆启动时加载在工作中常用于系统的预处理
比如玩游戏时出现界面预加载,加载后好处就是不需要额外处理,提升游戏体验 因为预加载的servlet不需要提供服务,所以不需要绑定URL,URL写在另一个Servlet中,这个过程相当于提供API接口?
我们在分析结果的java类中注解添加预加载:
需要loadOnStartup字段,而且无论是否用到,也必须添加urlPattern=“/xx”,这是servlet的要求,才会产生“正在分析结果”的结果,因为我们没有写service、doGet、doPost等提供服务的方法,所以需要设置一个不会与其他Servlet冲突的地址