Servlet
什么是服务器
- 服务器就是一台高性能电脑
- 电脑上安装了提供服务的软件就称为 xxx服务器
- 举例:
- 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件
- ftp服务器: 就是在电脑上安装了提供文件上传下载服务的软件
- 数据库服务器: 在电脑上安装了提供数据增删改查服务的软件(MySQL/Oracle…)
- web服务器: 就是在电脑上安装了web服务软件(Webserver)
Web服务软件做了那些事儿
- 负责建立底层的网络连接
- 负责将客户端请求的文件返回给客户端
- web服务器又称为web容器, web容器是用来装组件(Servlet),Web服务软件通过解析请求地址找到对应的Servlet作出响应
Servlet
- Servlet是用于扩展Web服务软件业务功能的组件,每一种业务都对应一个单独的Servlet
如何在Eclipse中关联Tomcat
- 下载Tomcat安装文件: 从苍老师文档服务器, 找到常用下载->Java->Tomcat 8.4.45 解压到一个指定的目录(路径中不要有中文,可以在D盘直接创建java文件夹把下载的文件复制过去)
- eclipse中window->最后一个->Server->Runtime
如果里面有内容删除, 点击add->找到8.5(没有8.5的同学从文档服务器下载新的eclipse,下载完后记得要配置maven) ->点击Browser->找到第一步解压的文件夹->Finish - 找到servers面板(如果找不到 window->show View里面找,还是找不到other里面搜),在servers面板中点击超链接添加对应版本的Tomcat, 添加完之后双击修改单选到中间位置(这一步是修改部署工程的路径 作用后面会讲)
- 在servers里面Tomcat上右键start启动Tomcat,在控制台输出以下内容后,在浏览器中访问localhost:8080 显示出猫说明搞定
Server startup in 580 ms
如何删除关联
- 在servers面板中删除添加的Tomcat
- eclipse中window->最后一个->Server->Runtime 找到添加的Tomcat删除
- 把解压的Tomcat安装文件夹删除,重新解压
如何创建一个Web工程
- 创建maven工程 把jar改war
- 改错: 在最长的文件名上面右键点击最长的一个, 此过程是创建了web.xml配置文件,该配置文件中保存着请求路径和Servlet的对应关系
- 让创建的工程和Tomcat关联, 在工程名上右键->Properties->Targeted runtimes 在里面的Tomcat后面打钩 保存关闭即可
- 创建Servlet, 包名cn.tedu 类名HelloServlet 删除类里面的注释和代码
- 重写service方法 ,删除方法中的内容,控制台输出HelloServlet
- 在工程名上面右键Run as->Run on Server
- 浏览器中访问http://localhost:8080/servlet_1_1/HelloServlet,显示空白,控制台输出HelloServlet说明OK.
Servlet响应流程
- 请求由客户端浏览器发出,服务器的Tomcat软件先接收到请求,并且获取到请求中的子地址(/HelloServlet),Tomcat会拿着子地址去web.xml配置文件中找到对应的Servlet完整类名,然后通过反射技术实例化Servlet,然后调用Servlet中的service方法.最终执行到我们所写代码
客户端发出请求的几种方式
- 在浏览器的地址栏中写请求路径 回车后发出请求 get
- 在页面中通过超链接发出请求 get
- 在页面中通过form表单发出请求 get/post
Get和Post的区别
- GET: 请求参数放在请求地址的后面,请求参数有大小限制 只能传递几k的数据,而且参数在地址栏中可以看到 所以不能传递敏感信息(密码)
浏览器地址栏发出的请求是get
超链接发出的请求是get
form表单默认发出的请求是get - Post:请求参数放在请求体里面用户看不到,而且没有大小限制 通常上传文件时或者传递敏感信息时使用POST
只有form表单设置method="post"时 发出的才是post请求
创建的Servlet需要改名的话,切记把web.xml中的一起改掉不然报错
修改Servlet或页面里面的代码不需要重新运行工程,新增了Servlet后因为web.XML文件修改了 所以需要重新运行工程
发出请求时如何传递参数以及Servlet中如何获取参数
- get请求获取参数时中文乱码问题
Tomcat8.0以下版本才会有此问题, 找到Servers工程中的server.xml里面的65行 添加以下URIEncoding="UTF-8"属性
<Connector URIEncoding=“UTF-8” connectionTimeout=“20000” - post请求参数有中文时每次获取参数之前执行以下代码
request.setCharacterEncoding(“UTF-8”);
常见异常以及处理方式
404:
找不到资源, 此路径没有对应的文件,也没有对应的Servlet, 此时检查请求路径是请求文件还是请求Servlet,
- 1.如果请求的是文件 第一时间检查路径是否正确(包括请求路径和文件名)还要检查工程中的文件所在位置
- 2.如果请的是Servlet 第一时间检查路径是否正确(包括请求路径和Servlet名字是否和web.xml中的名字一致)
405:
找到了Servlet但是没有找到Servlet里面对应的方法, 比如:发出的请求是get请求但是Servlet里面没有doGet方法,或者发出的请求是post请求在Servlet里面没有doPost
500:
找到了Servlet也找到了对应doGet或doPost方法,在执行里面java业务代码的时候出错.
- 唯一解决方案就是详细检查业务代码
练习---------------------------------------------------------------
SayHello步骤:
- 在webapp下面创建sayhello.html页面 页面中添加form表单发出get请求,请求地址为SayHelloServlet 表单中有一个文本框和一个提交按钮
- 创建SayHelloServlet 留下doGet方法其它全部删除,在方法中获取传递过来的参数,把参数和你好拼接到一起 通过HelloServlet里面的相关代码把拼接好的字符串返回给浏览器
创建新的工程实现SayHello功能
- 创建maven工程servlet1_2 把jar改war
- 改错: 在最长的文件名上面右键点击最长的一个, 此过程是创建了web.xml配置文件,该配置文件中保存着请求路径和Servlet的对应关系
- 让创建的工程和Tomcat关联, 在工程名上右键->Properties->Targeted runtimes 在里面的Tomcat后面打钩 保存关闭即可
- 在webapp下面创建sayhello.html页面 页面中添加form表单发出get请求,请求地址为SayHelloServlet 表单中有一个文本框和一个提交按钮
- 创建SayHelloServlet 留下doGet方法其它全部删除,在方法中获取传递过来的参数,把参数和你好拼接到一起 通过HelloServlet里面的相关代码把拼接好的字符串返回给浏览器
加法运算练习
- 在webapp下创建add.html页面页面中添加form表单发出get请求 提交地址为AddServlet, form表单里面两个文本输入框(name分别为n1和n2)和一个提交按钮
- 创建AddServlet留下doGet方法,在方法中获取传递过来的n1和n2 得到的是字符串类型需要转成int类型进行加法运算 把得到的结果返回给浏览器
BMI练习
- BMI身体质量指数 = 体重(kg)/身高(m)的平方 70/(1.8*1.8)
- 18.5以下 体重偏轻 18.5-24之间正常体重 24-28之间偏重 大于28肥胖
- 步骤:
- 创建bmi.html页面 页面中添加form表单,提交地址BMIServlet,两个文本输入框(name分别为h和w) 和一个提交按钮
- 创建BMIServlet 留下doGet方法获取传递过来的身高体重,转成double类型按照上面的公式进行计算得到bmi的值,判断bmi的值是在哪个范围来决定给页面返回什么数据