Servlet

服务器

  • 服务器实际上就是一台高性能的电脑
  • 电脑上安装xxx服务软件就称为xxx服务器
  • 举例:
    • 邮件服务器: 就是在高性能电脑上安装提供邮件收发服务的软件
    • ftp服务器: 就是在高性能电脑上安装了提供文件上传下载服务的软件
    • 数据库服务器:就是在高性能电脑上安装了提供数据增删改查服务的软件(MySQL/Oracle…)
    • web服务器: 就是在高性能电脑上安装了web服务软件(WebServer)

web服务软件

  1. 负责建立底层的网络连接
  2. 负责将客户端请求的文件返回给客户端
  3. web服务器又称为web容器, web容器负责装组件(Servlet), web服务软件通过解析请求路径,找到对应的Servlet做出响应

Servlet含义

  • Servlet(Sun公司)是用于扩展web服务软件业务功能的组件,每一种业务都需要对应一个单独的Servlet.

扩展Web服务功能

  • 早期的Web服务器(如Apache Web服务器)只能处理静态资源请求,无法根据请求计算后生成相应的HTML内容
  • 在Servlet出现之前可以使用CGI ( Common Gateway Interface通用网关接口)程序扩展Web服务器功能
  • CGI是一种规范,可以使用不同的语言来开发,比如Perl、C、Java等都可以,但是CGI开发复杂,性能比较差,可移植性不好

组件

在软件开发行业,符合一定规范,实现部分功能,并且需要部署到容器中才能运行的软件模块

容器

符合一定规范,提供组件运行环境的一个程序

Tomcat和Eclipse关联

  1. 下载Tomcat安装包,解压到D盘根目录下java文件夹
  2. 在eclipse里面点击window->最后一个->Server->Runtime Environment ,点击add找到与下载版本对应的版本号点击, 点击Browser 找到D盘java文件夹中的安装文件点击finishing
  3. 在eclipse中创建Tomcat服务器, 找到servers选项卡,在里面添加Server, 找到对应的版本号 添加即可,添加完之后双击添加的Server 修改单选为中间的一个, ctrl+s保存关闭即可.
  4. 在添加的server上面右键start 启动服务器 控制台提示Server startup in 2271 ms 说明Tomcat已经启动
  5. 通过浏览器访问localhost:8080 如果显示出猫说明 一切搞定!

删除关联好的Tomcat

  1. 在servers面板中 在Tomcat服务器上右键删除
  2. 在window->最后一个->Server->Runtiem Envivoments-> 删除已经添加好的
  3. 如果需要重新安装Tomcat 把之前文件夹中解压好的内容删除 重新解压后再添加

创建web工程

  1. 创建maven工程, 把jar改成war

  2. 改错: 工程中此时没有web.xml文件 需要在最长文件名的文件上右键点击最长的 此时会在工程中src->main->webapp->里面添加WEB-INF/web.xml

  3. 让工程和Tomcat关联, 在工程名上右键Properties->Targeted Runtimes

  4. 创建HelloServlet, 删除类里面所有的代码和注释, 重写一个service方法

  5. 在工程名上右键run as->run on server

  6. 在浏览器中访问http://localhost:8080/servlet_1_1/HelloServlet

  7. 如果控制台显示Servlet响应了 说明搞定!

Servlet响应流程

  • 浏览器发出http://localhost:8080/servlet_1_1/HelloServlet请求,请求先有Tomcat拦截,并且获取地址的/HelloServlet,然后拿着此路径去web.xml配置文件中找到对应的Servlet的完整类名,找到完整类名后通过反射技术,将该Servlet类实例化,然后Tomcat会调用Servlet的service方法.

浏览器发出请求的发方式

  1. 在浏览器地址栏中输入请求路径发出请求 Get
  2. 在超链接中写请求路径,点击超链接时发出请求 Get
  3. 通过页面中的form表单发出请求 Get/Post

请求方式的种类

请求方式作用
GET请求指定的资源
POST向指定的资源提交需要处理的数据
HEAD要求响应与相应的GET-样,但没有响应体
PUT上传指定资源
DELETE删除指定资源

常用的请求方式

  1. Get: 当通过浏览器地址栏/超链接/form表单指定get请求方式,这几种方式发出的请求都是Get请求
    • 请求参数在请求地址的后面 ,不建议传递敏感数据(密码)
    • 请求参数大小有限制 只能传递4k以内的数据
  2. Post:只有在form表单中添加了 method=post 发出的请求才是post请求
    • 请求参数在请求体里面(用户看不到),相对get请求安全性更高
    • 请求参数没有大小限制
  • 一般情况都是使用Get请求,只有当涉及敏感信息或上传文件请求时才是用Post请求

处理中文参数

表单提交中中文乱码

  • 为什么会产生乱码
    • 当表单提交时,浏览器会对中文参数值进行编码(会使用打开表单所在的页面时的字符集进行编码)。Web服务器在默认情况下会使用iso- 8859- 1去解码
    • 编码与解码方式不一致时, 就会出现乱码

解决POST方式时的乱码问题

  • step1 :确保表单所在的页面按照指定的字符集打开
    < meta http-equiv =”content-type" content= “text/html;charset=utf- 8”>
  • step2 :在服务器端按照这个编码格式解码即可
  • request.setCharacterEncoding( “utf-8” )
  • 添加在读取参数的前面
  • 此方法只针对post请求有效

解决GET方式时的乱码问题

  • step1 :使用meta确保表单所在页面按指定字符集打开
  • step2 :String username = request.getParameter( ’ name’username = new String(username.getBytes( “is0-8859-1” ), “utf-8” );

Servlet获取请求参数

获取请求参数值的方法

  • 获取提交的1: 1的Name Value的方法
    一getParameter(name)
  • 获取提交的1 :M的Name Values的方法
    getParameterValues(name)
getParameter方法
  • 常用于传入的参数中,一个名字对应一个值的形式
  • String request.getParameter(String paramName)
  • 如果参数名写错,会产生null

当URL为:http://localhost: 8080/ appName/hi ?name=Kitty时
Servlet中代码
string n=request . getParameter(“name” );
n的值就是"Kitty"

getParameterValues方法
  • String[ ]request.getParameterValues(String paramName)
  • 当需要获取参数名相同的多个参数值时使用该方法
  • 多用于获取提交的表单中复选框的值。
  • 如果该参数名不存在,则返回null

当URL为:http://localhost: 8080/ appName /hi ?name=Kitty&name=Tom时
Servlet中代码
string[ ] ns=request. getParameterValues( “name” );
字符串数组ns中的值就是[ “Kitty” , “Tom”]

Servlet运行的详细步骤

  • step1、浏览器依据ip、 port建立连接
  • step2、浏览器将相关数据打包,发送请求
  • step3、容器解析请求数据包,并且将解析到的数据封装到requst对象,同时创建一个response对象
  • step4、容器创建servlet对象,然后调用该对象的service方法
    (注:容器会将request和response作为参数传进来,可以通过resqust获取请求参数,也可以将处理结果放到response对象中)
  • step5、容器读取response对象中的处理结果,然后将处理结果打包发送给浏览器
  • step6、浏览器解析响应数据包,生成响应的页面。

静态页面和动态页面

  • 静态页面: 任何客户端 任何时间访问页面显示的内容都是一样的 称为静态页面
  • 动态页面: 显示的内容会受某些因素的影响而改变, 动态页面=从数据库中查询的数据+标签

Thymeleaf框架作用

如果不使用此框架, 我们服务器需要给客户端返回动态页面时,处理动态页面的代码需要全部写在Servlet中,动态页面部分包含很多页面标签,如果把标签代码写在Servlet中的话,首先代码书写效率很低,而且Servlet中的代码量会暴增,不利于代码的维护, 使用Thymeleaf框架可以将动态页面中的数据和页面分离开,在html页面中写一个模板页面, 通过该框架可以将数据库里面查询到的数据和模板页面整合到一起,整合到一起后再把数据返回到浏览器, 最终目的就是将页面相关代码从Servlet中分离写到单独的html页面中,提高了开发效率,也使得Servlet类更易维护.

重定向

  • 含义

    • 服务器向浏览器发送一个302状态码及一 个Location消息头(该消
      息头的值是一个地址,称之为重定向地址) , 浏览器收到后会立即
      向重定向地址发出请求
  • 写法:

response.sendRedirect(
request.getContextPath()+"/ListServlet");

  • 作用: 通知浏览器往指定的路径发出请求
  • 执行过程: 当执行此代码时,服务器会给浏览器返回一个302状态码和一个请求路径,当浏览器接收到302状态码时会立即向指定的路径再次发出请求.
  • 原理
    1.访问AddEmp
    2.执行数据插入操作
    3.执行结束后使用重定向代码发回一个数据包,里面包括302状态
    码和一个消息头Location
    4.浏览器收到后会立即向服务器的ListEmp发出请求
  • 特点
    • 重定向的地址可以是任意的地址
    • 重定向之后, 浏览器地址栏的地址会发生改变
    • 重定向过程中涉及到的Web组件并不会共享同一个request和response对象

servlet 输出中文时需要注意:

  • 为什么有乱码?
  • Out默认情况下,会使用iso-8859-1编码
    • 解决办法
      response.setContentType( “text/htmI;charset=utf-8” )

表单包含中文时

  • 为什么出现乱码
    表单提交时, 浏览器会按照表单所在页面时的字符集来编码。
    服务器端默认情况下,会使用iso-8859-1来解码
    • 解决办法:
      • a.表单提交时指定字符集来编码
        < metahttp-equiv= " content-type content=" text/html;charset=utf-8" >
      • b.服务端使用对应的字符集来解码
      • 方式一: request.setCharacterEncoding(. “utf-8” );
        - 注:只对post请求有效,在接受参数之前加(如果只是get请求:在servers.xml的65行左右添加URLEncoding=" utf-8" ,)
        方式二:先还原得到浏览器发送过来的字节数组,然后使用正确的字符集来解码(对get和post都有效)
        例如
        uname= new
        String(uname.getBytes(" iso-8859-1" )," utf-8" );

常见错误列表

  1. 端口占用错误: Tomcat非正常关闭导致Eclipse中显示Tomcat未执行实际上仍在执行
    解决方案: 1. 重启电脑 2. 找到Tomcat安装文件夹 找到里面的bin文件夹中的shutdown.bat, 双击即可强制关闭Tomcat. 再次运行工程即可
  2. 8080端口占用错误
    在这里插入图片描述
    解决方案: 在Servers面板中双击Tomcat8.5 找到ports->HTTP1.1 把里面8080改成8081 保存后重新运行工程 访问路径为http://localhost:8081/工程名/…
  3. 未知错误
    在这里插入图片描述
    解决方案:
  1. Clean工程: 在eclipse的Project里找到Clean , 在Servers面板中展开Tomcat删除里面所有的工程或在Tomcat上面右键Clean, 重新运行如果错误没有解决看第2步.
  2. 删除Servers面板中的Tomcat8.5 然后重新添加(添加完后想着双击一下修改单选为中间的) 再次运行工程如果还没有解决掉错误 看第3步
  3. 删除Eclipse中关联的Tomcat, Window->最后一个->Server->Runtime Environment 找到添加的Tomcat 删除 ,并且找到之前解压的Tomcat安装文件夹 删除 重新解压一份,把重新解压的和Eclipse重新进行关联,关联后还要在Servers面板中重新添加一次Tomcat8.5 添加完后重新运行工程.
  1. 工程未关联Tomcat报错
    在这里插入图片描述
    解决方案: 在工程上右键Properties找到Targeted Runtimes 打钩 关闭即可.

常见错误代码

  • 404:状态码服务器依据请求资源路径,找不到响应的资源。
    • 解决办法:
      • a: 检查请求地址是否正确。
      • b:检查配置文件web.xml
  • 500:服务器处理出错。一般是因为程序运行出错。
    • 解决办法:
      • a检查程序代码,例如是否继承。
      • b:检查配置文件web.xm!,类名是否填写正确。
  • 405:服务器找不到相应的service方法。
    • 解决办法:检查service方法的签名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值