写点什么

Servlet 基础知识与新手常遇到的错及解决方法 (01)

  • 2021 年 12 月 25 日
  • 本文字数:2589 字

    阅读完需:约 8 分钟

什么是服务器

服务器就是一台高性能的电脑

  • 电脑上安装什么样的服务器软件,就可以称为 xxx 服务器

  • 举例:

  1. 安装了数据库软件(mysql/Oracle…),就是数据库服务器

  2. 安装了 ftp 服务软件,就是 ftp 服务器

  3. 安装了邮件服务器软件,就是邮件服务器

  4. 安装了 web 服务软件,就是 web 服务器

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

  1. 负责建立底层的网络连接

  2. 负责将客户端请求的文件返回给客户端

  3. web 服务软件又称为 web 容器,web 容器用来装组件(Servlet), web 服务软件根据客户端发出的请求路径,找到对应的 Servlet 做出响应

什么是 Servlet

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

如何在 eclipse 中关联 Tomcat

  1. 从 doc.canglaoshi.org 中下载 Tomcat 7.0.96 解压到一个指定目录

  2. 打开 eclipse 中 window->preferences->Server->Runtime->add->找到对应的版本 Create a new Local servet 打钩->下一步->选择下载的文件夹 finish

  3. 确认 eclipse 为 JavaEE 视图模式,并且工程目录为 Project Explorer

  4. 找到 servers 选项卡,在里面的 Tomcat 上双击 把里面的单选选择中间的一个 保存

  5. 在 servers 里面 Tomcat 上面右键 start

  6. 打开谷歌浏览器在地址栏中输入 http://localhost:8080 在页面中显示出猫 说明安装完成!

创建 web 工程

  1. 创建 maven 工程 02servlet_1_1 把 jar 改 war

  2. 改错: 在最长的文件名上面右键点击最长的(在 src/main/webapp 下面生成了 web.xml 配置文件)

  3. 让工程和 Tomcat 建立关系:工程上右键 properties->Targeted Runtimes->打钩后关闭

  4. 在 JavaResources 里面的 src/main/java 上面右键新建 Servlet 添加包名 cn.tedu 类名 HelloServlet

  5. 在 HelloServlet 里面删除注释和类里面所有代码,重写 service 方法,删除方法里面的内容添加一个输出,代码如下:

public class HelloServlet extends HttpServlet {			@Override			protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {				System.out.println("恭喜你,接收到请求了!");			}		}
复制代码
  1. 在工程上右键 Run As-> Run on Server 打钩 完成

  2. 在弹出的浏览器中 或自己的谷歌浏览器中 写以下地址


    http://localhost:8080/02servlet_1_1/HelloServlet 回车访问


    如果页面显示空白,并且在 eclipse 控制台中输出 恭喜你… ,说明一切成功!

Servlet 响应流程

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

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

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

  1. 在浏览器的地址栏中写请求路径 回车后发出请求 get

  2. 在页面中通过超链接发出请求 get

  3. 在页面中通过 form 表单发出请求 默认 get/post

请求方式 get 和 post

  • get: 请求参数放在请求地址的后面,请求参数大小受限 只能传递几 k 的数据, 由于参数用户可见 不能传递敏感信息(密码)

  • post: 请求参数放在请求体里面,没有大小限制通常上传文件时使用,参数内容用户不可见 敏感数据通过 post 请求

获取传递到服务器的参数

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

请求参数中包含中文

  1. post 请求中有中文解决方案:


    在获取参数之前执行以下代码


    request.setCharacterEncoding(“UTF-8”);

  2. get 请求中有中文如果是 tomcat8.0 以上版本不存在乱码问题,如果 8.0 以下版本找到 Servers 工程中的 server.xml 找到 65 行 添加 URIEncoding=“UTF-8” 改完后保存并重新运行工程 ,只需要改一次 以后所有 Servlet 都搞定


    <Connector URIEncoding=“UTF-8” connectionTimeout=“20000”

sayhello 练习

  1. 在 webapp 下创建 sayhello.html 页面在页面中准备 form 表单 提交地址为 SayHelloServlet,表单中有一个文本框文本框的 name 值为 info 和一个提交按钮

sayhello.html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>	<form action="SayHelloServlet">		<input type="text" name="info">		<input type="submit">	</form></body></html>
复制代码
  1. 创建 SayHelloServlet,留下 doGet 方法其它删除,在 doGet 方法中获取传递过来的 info,将得到的 info 后面拼接上“你好”两个字返回给浏览器

SayHelloServlet.java

import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SayHelloServlet extends HttpServlet {	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		//获取参数		String info = request.getParameter("info");		//设置响应类型		response.setContentType("text/html;charset=utf-8");		//获取输出对象		PrintWriter pw=response.getWriter();		//输出数据		pw.print(info+"你好!");		//关闭资源		pw.close();	}	}
复制代码

常见错误:

  1. 端口号被占用错误 关键字 8005,8080,8009


  1. 解决:找到 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

用户头像

公众号:海拥 2021.11.29 加入

【个人网站】haiyong.site 【软件技能】Java,Python,JS 【兴趣爱好】学习使我快乐,编程令我永生 【个人称号】HDZ核心组成员,CSDN原力作者

评论

发布
暂无评论
Servlet基础知识与新手常遇到的错及解决方法(01)