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

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

什么是服务器


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


电脑上安装什么样的服务器软件,就可以称为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工程 02servlet_1_1 把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/02servlet_1_1/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和一个提交按钮

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>



创建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();
  } 
}



常见错误:


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



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


如果运行工程访问指定路径时控制台提示ClassNotFoundException这样的错误,Clean一下工程,作用是让工程把编译好的内容删掉重新编译即可解决.

如何clean:在eclipse菜单栏中Project->clean


404状态码,代表找不到资源(资源代表文件资源或Servlet),检查路径是否书写正确,检查资源文件位置是否正确


如果运行工程直接报错,并且是以弹窗形式报错,里面全是英文,并且没有端口信息



clean工程:


(1). 在eclipse菜单栏中Project->clean

(2). 在servers面板中的Tomcat上面右键Clean

1

2

如果上面没有解决继续往下:


把servers面板中的Tomcat删除(Tomcat上面右键Delete)重新添加(点击servers面板中出现的超链接 选择对应的版本添加,添加之后双击Tomcat 把单选改成中间的保存),重新添加完Tomcat服务器后将工程重新运行.


如果上面没有解决继续往下:


把eclipse关联的Tomcat删除重新添加

如何删除:window->Preferences->Server->RunTime->找到里面已经存在的Tomcat从右侧Remove,把之前解压的Tomcat安装包文件夹删除重新解压一份.

如何添加:参考前面 如何在eclipse中关联Tomcat


目录
相关文章
|
Java 应用服务中间件 Android开发
无法解析javax.servlet的解决方法
无法解析javax.servlet的解决方法
4352 0
无法解析javax.servlet的解决方法
|
关系型数据库 MySQL 应用服务中间件
tomcat与servlet程序出现乱码的解决方法(已解决)
tomcat与servlet程序出现乱码的解决方法(已解决)
109 0
gdy
|
编解码 JavaScript 前端开发
jQuery Ajax传值给Servlet,在Servlet里Get接受参数乱码的解决方法
  最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如下: public void doGet(HttpServletRequest reque...
gdy
1751 0
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
36 3
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
34 1
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
55 0
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
29 0
|
5月前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
105 12
下一篇
无影云桌面