前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet基础知识与新手常遇到的错及解决方法(01)

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

作者头像
海拥
发布2021-08-23 15:11:57
6780
发布2021-08-23 15:11:57
举报
文章被收录于专栏:全栈技术全栈技术

###什么是服务器

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

  • 电脑上安装什么样的服务器软件,就可以称为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方法,删除方法里面的内容添加一个输出,代码如下:
代码语言:javascript
复制
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

代码语言:javascript
复制
<!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

代码语言:javascript
复制
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
在这里插入图片描述
在这里插入图片描述

解决:找到Tomcat安装包的位置 D:\java\apache-tomcat-7.0.96\bin 里面的shutdown.bat 双击运行 重复启动Tomcat即可.

  1. 如果运行工程访问指定路径时控制台提示ClassNotFoundException这样的错误,Clean一下工程,作用是让工程把编译好的内容删掉重新编译即可解决. 如何clean:在eclipse菜单栏中Project->clean
  2. 404状态码,代表找不到资源(资源代表文件资源或Servlet),检查路径是否书写正确,检查资源文件位置是否正确
  3. 如果运行工程直接报错,并且是以弹窗形式报错,里面全是英文,并且没有端口信息
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Servlet响应流程
  • 常见错误:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档