一、程序的架构
1、C/S架构
C/S架构是一种客户端/服务器的工作模式,由C :客户端和S:服务器组成。
2、B/S架构
B/S架构是一种浏览器/服务器的工作模式,又叫做请求/响应模式。B是浏览器,S是服务器。
一般常用的都是B/S架构,比较方便,降低程序的开发和维护成本。
B/S架构的工作原理:
1) 客户端(浏览器)可以接受用户的输入。
2)客户端把请求消息发送到服务器端,等待服务器端响应。
3)服务器端对数据进行处理,使用服务器端技术,JSP等,对请求进行数据处理。
4)返回响应:服务器端向客户端发送响应,并由浏览器解释执行,展示到用户界面。
URL:全称Uniforn Resource Locator ,是Internet上标准的资源地址,又叫做统一资源定位符。
二、Servlet
1、什么是Servlet?
Servlet是一种独立于平台和协议的服务器端JAVA应用程序,通过Servlet可以生成动态的Web页面。
作用:就是交互的浏览和更新数据,并且生成动态的页面进行展示。
使用Servlet处理Web请求,主要有以下步骤:
a、服务器接收从客户端发送的请求。
b、服务器请求信息发送至Servlet。
c、Servelt处理后,生成响应的内容。
d、服务器将响应返回给客户端。
2、Servlet API
Servlet 是server 以及applet两个单词的合成,是一种服务器端的java应用程序。
注意:只有当服务器端使用ServletAPI时,才能算是一个Servlet。
ServletAPI又叫做Java Servlet应用程序接口,其中包含了很多的接口和类。
3、Servlet生命周期
Servlet容器,是用来装载Servlet对象的一种容器,否则管理Servlet的一类组件。
Servlet生命周期是指Servlet从创建到销毁的过程。有以下几个过程。
a、加载和实例化。客户端请求
b、初始化。容器调用init()方法
c、提供服务,处理请求。容器调用service()方法。
d、销毁。调用destroy()方法,服务器停止运行。
4、Servlet的使用
创建Servlet的方式:
- 实现Servlet接口
- 继承GenericServlet类
- 继承HttpServlet类(一般常用)
创建Servlet之后,重写doGet,doPost方法,这两个方法都是用来处理表单提交的数据,分别对应get,post提交方式。
5、Servlet的部署和运行
Servlet的部署
首先需要对web.xml文件进行配置
<!--如下设置登录的servlet-->
<servlet>
<servlet-name>loginServlet</servlet-name> <!--定义的Servlet应用名字-->
<!-- 定义的servlet应用名字对应的具体servlet文件-->
<servlet-class>cn.web.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping> <!--地址映射-->
<servlet-name>loginServlet</servlet-name> <!--定义的Servlet映射名字,和Servlet名字一致-->
<url-pattern>/login</url-pattern> <!--映射地址-->
</servlet-mapping>
注1: web容器的配置文件一般放置在根目录下的WEB-INF文件夹中,文件名为web.xml。
6、Servlet跳转的两种方式
转发和重定向,区别如下:
<1>、转发:
a. 使用request请求对象跳转
b. 具体的跳转方法:
getRequestDispatcher("目标地址").forward(请求, 响应);
c. URL地址显示: 原地址
d. 请求对象: 跳转前后的请求对象是同一个请求对象,1个请求, 请求中的数据保留
e. 跳转发起位置: 服务器
<2>、重定向:
a. 使用什么对象发起跳转: response响应对象
b. 具体的跳转方法: sendRedirect("目标地址");
c. URL地址显示: 目标地址
d. 请求对象: 跳转前后的请求对象是不同的请求对象,2个请求, 请求中的数据不保留
e. 跳转发起位置: 客户端
7、通过后台的Servlet如何获取页面数据?
通过请求对象request获取页面参数
方法1: request.getParameter("页面参数名"); 获取指定名称的页面参数(单个), 返回值类型String
方法2: request.getParameterValues("页面参数名"); 获取指定名称的页面参数(复数), 返回值类型String[]
注: 数据传递默认字符集为iso-8859-1, 一旦传递中文一定要处理乱码
根据数据传递方式的不同处理方式也不同.
post格式: 必须在参数获取之前执行相关代码才有效. 一次处理所有数据都有效
1) 处理请求中的中文乱码
request.setCharacterEncoding("utf-8");
2) 处理响应中的中文乱码
response.setCharacterEncoding("utf-8");
3) 处理响应页面的字符集编码格式
response.setContentType("text/html;charset=utf-8");
get格式: 只能在数据获取之后逐一处理
如:new String(s.getBytes("ISO-8859-1"),"UTF-8"); 将字符串打散成字节,重新拼接成utf-8的编码格式。
注: 在代码中先进行了post格式的处理, 不影响get格式的处理.但反之则不能。