1、b/s架构
(1)什么是b/s架构
客户端使用浏览器,服务端使用web服务器,客户端跟服务器之间使用http协议进行通讯。
(2)有点:
a、客户端不需要单独的安装(因为使用浏览器)
c/s架构比较麻烦的是需要单独安装每个客户端,而且,一旦客户端版本发生改变,就需要再次安装。
b、开发相对简单
c/s架构,需要我们分别在客户端已服务端编写相应的通信处理模块和自定义协议,而b/s架构使用标准的http协议(不需要自定义协议),并且,浏览器和web服务器已经包含了相应的通信模块
2、什么事Servlet?
sun公司制定的一种用来扩展web服务器功能的组件规范。
(1)扩展web服务器功能
早期代表性的服务器: Apache web server, 微软的iis (这两个服务器中都存在一个缺点,就是不能处理动态的资源,只能处理静态资源 ,静态资源缺点不灵活)
为了让这些web服务器能够处理这些动态资源的请求,需要扩展他们功能。
早期使用CGI技术(common gateway interface),可以使用很多的语言,比如prelude,c等来开发CGI程序,但是cgi程序有几个问题
a、开发比较复杂(需要程序员自己去分析请求参数)
b、性能差
c、可移植性差,依赖cgi平台
(2)组件规范
3、安装tomcat(网上有很多)
Servlet容器也可以作为一个简单的web服务器来使用。
4、如何写一个Servlet?
step1 ,先写一个Java类,实现Servlet接口或者继承HttpServlet抽象类
step2,编译
step3、打包
即创建一个具有如下结构的文件夹
appname(应用名)
WEB-_NF
classes(.class文件)
lib(.jar文件)
web.xml(.class文件)
step4、部署
将step3创建的文件夹拷贝到Servlet容器特定的文件夹下面。
注意:也可以将step创建的文件夹使用jar命令进行压缩,生成.war为后缀的文件,然后拷贝。
step5、启动Servlet容器,访问Servlet。
http://ip:port/appname/url-pattern
5、Servlet是如何运行的?
比如,在浏览器地址栏中输入:http://ip:port/web01/hello
step1、浏览器依据ip、port建立与Servlet容器之间的连接
step2、浏览器将请求数据打包(按照HTTP协议的要求,将相关的数据封装成一个数据包,一般称之为请求数据包)并发送到Servlet容器。
step3、Servlet容器解析请求数据包,并将解析之后得到的数据放到request对象上。同时,容器还要创建一个response对象。
step4、Servlet容器依据请求资源路径(web01\hello)找到Servlet的配置,然后创建Servlet对象
step5、Servlet容器接下来调用Servlet对象的service方法,并且会将事先创建好的request对象和response对象作为service方法的参数传递给Servlet对象
step6、Servlet可以通过request对象获得请求参数,进行相应的处理,然后将处理结果写到response对象上。
step7、容器读取response对象上的数据,然后将处理结果打包(响应数据包)并发送给浏览器。
step8,浏览器解析响应数据包,将返回的数据
package web;
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 HelloWorldServlet extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException ,IOException{
//设置一个消息头content-type,告诉浏览器返回的数据类型是html文档。
response.setContentType("txt/html");
//获得一个输出流
PrintWriter out = response.getWriter();
out.println("<span style = 'color:red;font-size:30px;'>" +
"HEllo word</span>");
out.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>helloWorld</servlet-name>
<!-- 类名要完整(包名,类名都得有) -->
<servlet-class>web.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
常见问题解决方式
(1)404
404是一个状态码(是一个三位数,有服务器发送给浏览器,告诉浏览器是否正确地处理了请求),404的意思是说:服务器根据请求资源路径,找不到相应的资源。
解决:
a、依据http://ip:port/appname/url-pattern检查你的地址是否正确。
b、仔细检查web.xml,特别要注意Servlet-name是否一致。
(2)500
500的意思是说:服务器处理出错,一般是因为程序运行出错。
解决:
a、检查程序代码
b、配置文件出错,xml文件中的类名要填写正确
(3)405
405服务器找不到相应的service方法。
解决: 检查service方法的签名(方法名,参数类型,返回类型,异常类型)