什么? 这就是传说中的Servlet?

我是一个从汽车行业转行IT的项目经理,我是Edward,如想了解更多,请关注我的公众号【转行项目经理的逆袭之路】。学到Servlet就真正进入了Java EE的工程阶段了,让我们一起来看看什么是Servlet,不过在这之前首先来理一下Web中各个大佬的关系。

什么是服务器

服务器就是一台高性能的电脑
电脑上安装什么样的服务器软件,就可以称为xxx服务器
举例:
安装了数据库软件(mysql/Oracle…),就是数据库服务器
安装了ftp服务软件,就是ftp服务器
安装了邮件服务器软件,就是邮件服务器
安装了web服务软件,就是web服务器

web服务软件做了那些事儿?

负责建立底层的网络连接
负责将客户端请求的文件返回给客户端
web服务软件又称为web容器,web容器用来装组件(Servlet), web服务软件根据客户端发出的请求路径,找到对应的Servlet做出响应
在这里插入图片描述

什么是Servlet

Servlet是用于扩展web服务软件业务功能得组件,每一种业务请求都需要对应一个单独的Servlet

如何在eclipse中关联Tomcat

从doc.canglaoshi.org中下载 Tomcat 7.0.96 解压到一个指定目录
打开eclipse中window->preferences->Server->Runtime->add->找到对应的版本 Create a new Local servet打钩->下一步->选择下载的文件夹 finish
确认eclipse为JavaEE视图模式,并且工程目录为Project Explorer
找到servers选项卡,在里面的Tomcat上双击 把里面的单选选择中间的一个 保存
在servers里面Tomcat上面右键 start
打开谷歌浏览器在地址栏中输入 http://localhost:8080 在页面中显示出猫 说明安装完成!

创建web工程

创建maven工程 把jar改war
改错: 在最长的文件名上面右键点击最长的(在src/main/webapp下面生成了web.xml配置文件)
让工程和Tomcat建立关系:工程上右键properties->Targeted Runtimes->打钩后关闭
在JavaResources里面的src/main/java上面右键新建Servlet 添加包名cn.tedu 类名HelloServlet
在HelloServlet里面删除注释和类里面所有代码,重写service方法,删除方法里面的内容添加一个输出,代码如下: public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(“恭喜你,接收到请求了!”); } }
在工程上右键Run As-> Run on Server 打钩 完成
在弹出的浏览器中 或自己的谷歌浏览器中 写以下地址 http://localhost:8080/02servlet11/HelloServlet 回车访问 如果页面显示空白,并且在eclipse控制台中输出 恭喜你… ,说明一切成功!

Servlet响应流程

请求由浏览器发出到web服务器,由web服务器的web服务软件(Tomcat)拦截,Tomcat拦截到请求后,获取出请求的字地址(/HelloServlet),通过该字地址去web.xml找到处理该请求的Servlet的完整类名,得到完整类名后Tomcat通过反射技术将该对象实例化,然后调用对象的service方法,从而导致程序员写在Servlet里面的代码执行

如果只是修改了代码没有创建新的Servlet是不需要重新运行工程的

浏览器发出请求的几种方式

在浏览器的地址栏中写请求路径 回车后发出请求 get
在页面中通过超链接发出请求 get
在页面中通过form表单发出请求 默认get/post

请求方式get和post

get: 请求参数放在请求地址的后面,请求参数大小受限 只能传递几k的数据, 由于参数用户可见 不能传递敏感信息(密码)
post: 请求参数放在请求体里面,没有大小限制通常上传文件时使用,参数内容用户不可见 敏感数据通过post请求

获取传递到服务器的参数

String info = request.getParameter(“info”);

请求参数中包含中文

post请求中有中文解决方案: 在获取参数之前执行以下代码 request.setCharacterEncoding(“UTF-8”);
get请求中有中文如果是tomcat8.0以上版本不存在乱码问题,如果8.0以下版本找到Servers工程中的server.xml 找到65行 添加URIEncoding=“UTF-8” 改完后保存并重新运行工程 ,只需要改一次 以后所有Servlet都搞定 <Connector URIEncoding=“UTF-8” connectionTimeout=“20000”

sayhello练习

在webapp下创建sayhello.html页面在页面中准备form表单 提交地址为SayHelloServlet,表单中有一个文本框文本框的name值为info和一个提交按钮
创建SayHelloServlet,留下doGet方法其它删除,在doGet方法中获取传递过来的info,将得到的info后面拼接上“你好”两个字返回给浏览器

常见错误:

在这里插入图片描述
1、端口号被占用错误 关键字8005,8080,8009,找到Tomcat安装包的位置 D:\java\apache-tomcat-7.0.96\bin 里面的shutdown.bat 双击运行 重复启动Tomcat即可.
2、如果运行工程访问指定路径时控制台提示ClassNotFoundException这样的错误,Clean一下工程,作用是让工程把编译好的内容删掉重新编译即可解决. 如何clean:在eclipse菜单栏中Project->clean
3、404状态码,代表找不到资源(资源代表文件资源或Servlet),检查路径是否书写正确,检查资源文件位置是否正确

在这里插入图片描述
4、如果运行工程直接报错,并且是以弹窗形式报错,里面全是英文,并且没有端口信息

clean工程:
1)在eclipse菜单栏中Project->clean
2)在servers面板中的Tomcat上面右键Clean 如果上面没有解决继续往下:

  • 把servers面板中的Tomcat删除(Tomcat上面右键Delete)重新添加(点击servers面板中出现的超链接 选择对应的版本添加,添加之后双击Tomcat 把单选改成中间的保存),重新添加完Tomcat服务器后将工程重新运行.如果上面没有解决继续往下:
  • 把eclipse关联的Tomcat删除重新添加如何删除:window->Preferences->Server->RunTime->找到里面已经存在的Tomcat从右侧Remove,把之前解压的Tomcat安装包文件夹删除重新解压一份. 如何添加:参考之前记录中 如何在eclipse中关联Tomcat

综合小练习:

实现加法运算功能:
步骤如下:

创建新工程02servlet13 jar改war
改错 最长上面右键最长
关联Tomcat
在webapp下创建plus.html页面 里面添加form表单 提交路径PlusServlet 表单里面两个文本框(name分别为n1和n2)和一个按钮
创建PlusServlet 留下doGet方法 在方法中获取传递过来的两个参数 将两个字符串参数转成浮点数相加 得到的结果返回给浏览器 搞定!

工程中使用数据库需要做的事儿

把数据库相关jar包导入工程 找到之前创建的和数据库相关的工程,把pom.xml里面的mysql和数据库连接池两个坐标信息复制到新工程
把jdbc.properties配置文件从之前工程中赋值过来
把DBUtils工具类从之前工程中赋值过来
工程中使用获取连接的代码时 需要将工程改成1.7,此时有个地方需要手动从1.5改成1.7否则会有一个报错,但是此错误不影响运行 在工程上右键->Properties->Project Facets->找到java 把1.5改成1.7

实现注册、登录以及显示所有用户和删除行的功能

浏览器给服务器传递参数两种方式:

通过form表单,两种 get和post,get是将请求参数放在请求地址的后面,post是将请求参数放在请求体
在请求地址的后面手动拼接参数

DAO Data Access Object 数据访问对象

最后,代码重构

创建4个包: 1. entity(里面放实体类) 2. dao(工程中所有dao) 3. controller(放所有的servlet) 4. utils(放所有工具类) ,把之前工程DBUtils复制到utils包下面。

常见错误码

404: 找不到资源,该路径没有对应的资源 先Clean重新运行, 如果未解决 检查路径是否正确, 需要考虑Servlet是否在创建完之后改过名字 如果改过名字web.xml中也需要跟着改 不然就404,如果访问的页面或文件资源 检查文件在工程中的位置是否正确
405: 找到了对应的Servlet,但是找不到里面处理该请求的方法, 如果页面发出的请求时get 但是留下的是doPost此时会405, 如果页面发出的请求时post 但是留下的是doGet此时也会405
500: 业务代码出错,出错的面积很广
空指针异常,多发生在没有获取到参数,然后又对得到null进行处理,此时会空指针
类型转换异常,没传递参数或参数值为字符串 但是又强制转成数值时报此错误
SQL语句写错

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值