servlet-01

b(浏览器)/s(服务器)

1、什么是B/S

客户端采用的是标准的浏览器,服务器采用的是标准的web服务器,浏览器与web服务器采用的是标准的HTTP协议进行通讯

相对于C/S而言,B/S优势:

编程相对简单,C/S结构需要单独编写通讯模块与自定义协议,而B/S结构采用的是标准的浏览器与web服务器,包含了通讯模块,并且浏览器与web服务器采用的是标准的HTTP协议进行通讯,也不需要编写

2、什么是Servlet

sun公司制定的一种用于扩展web服务器功能的组件规范。

扩展web服务器功能?

因为早期的web服务器只能处理静态资源文件,不能处理动态(需要经过一系列计算生成的页面)的资源文件,所以需要扩展。

如何扩展?(组件+容器)

组件:符合特定规范,为了实现某个功能而定义的java类。

容器:符合规范,为了组件提供运行环境,并且可以管理组件生命周期的软件模块。

注:组件依赖于容器,但并不依赖于特定的容器

3、tomcat容器

启动tomcat:双击tomcatinstartup.bat

验证是否启动成功:地址栏输入-localhost:8080

     localhost:主机名(127.0.0.1)

     8080:服务器端口号

4、如何定义一个servlet组件

a.新建一个java类,继承HttpServlet

b.重写service方法

c.在web.xml文件中配置servlet

5、http://localhost:8080/servlet01/sayHello

a.根据ip:端口号与服务器建立连接(localhost:8080)

b.根据应用名(servlet01)查找tomcatwebapps下对应的文件夹

c.如果找到该文件夹,根据/sayHello与web.xml文件中的url-pattren进行匹配

d.如果匹配成功,根据mapping中的name可以确定调用哪一个<servlet>,在<servlet>标记中通过<servlet-class>可以确定调用哪一个servlet组件

e.容器利用反射的技术创建servlet对象,并调用其service方法处理请求

6、哪些是get请求

a.直接在浏览器地址栏中输入地址

b.点击链接<a href=""></a>

c.表单的默认提交方式<form method="get" action="">

    哪些是post请求

将表单的提交方式该成post    <form method="post" action="">

7、如何在servlet中正确输出中文?

response.setContentType("text/html;Charser=utf-8");
PrintWriter out=response.getWriter();
out.print("中文");

8、如何获取请求参数值

String:request.getParameter(String name);

若参数值是中文:

GET:需要修改tomcatconfserver.xml中69行  URIEncoding="utf-8"

POST:在获取参数值之前,调用  request.setCharacterEncoding("utf-8");

9、servlet运行原理:

第一步:浏览器根据IP:端口号与服务器建立连接

第二步:浏览器通讯模块根据http协议将数据打包

第三步:浏览器向服务器发送请求

第四步:服务器端通讯模块根据http协议拆包,并且将拆包之后的数据存放到request(请求对象)中,方便将来在service中获取请求数据

第五步:根据请求路径查找对应的servlet,容器负责创建该对象

第六步:容器负责调用该对象的service方法

第七步:在service方法中,根据具体业务逻辑编写代码,比如:向页面输出“Hello Servlet”

第八步:服务器端通讯模块从response(响应对象)中取出缓存数据,并按照http协议打包

第九步:服务器发送响应,浏览器拆包,根据服务器响应的数据生成新的页面

10、常见错误

a.  servlet组件没有继承HttpServlet   ——500

b.  service方法写错 ——405

c.  servlet配置的name不一致 ——部署报错

d.  servlet-class路径写错 ——500

e.  路径写错 ——404

Address already in use:端口号被占用

解决方案:关闭之前的tomcat服务

方案一:双击shutdown.bat文件

方案二:通过命令关闭(dos界面-windows)

              查找进程号:netstat -ano|findstr 8080

              杀掉进程:taskkill /pid 进程号 /f

原文地址:https://www.cnblogs.com/xslzwm/p/9667264.html