网络程序两层CS:客户端+DB
网络程序三层CS:客户端+应用服务器+DB(其中,数据库负责数据的管理,应用服务器处理业务逻辑,客户端提供操作界面)
网络程序BS架构:Browser+Web Server +DB 优点在于:不需要安装客户端,用http协议进行通信。
Servelt:扩展Web服务器功能(早期Web服务器只能处理静态资源的请求,无法动态计算生成Html界面)的组件规范(实现部分功能,部署到容器中才能运行的软件模块)。
错误提示:404 , 405(Web服务器找不到service()方法处理请求) 500(程序运行过程中出错)
HTTP协议:HyperText Transfer Protocol定义浏览器与Web服务器之间如何通信和通信的数据格式。
请求:请求头(请求方式+请求路径+协议版本),消息头,请求内容(post请求时才有)
响应:状态行(协议类型+版本+状态码+状态描述)。消息头,实体内容。
当Web容器收到一个Http请求时,通信数据由Web容器进行封装和处理,这些信息被分为HttpServletRequest和HttpServletResponse
HttpServletRequest:读取和写入Http请求数据,取得和设置Cookies,标识http会话,实现请求转发
常用方法:
getHeaderNames()
getHeader(String name)
getMethod()
getRequestURI
HttpServletResponse:
设置响应码,设置Session,实现重定向,设置浏览器的解码方式,设置对客户端的输出结果。
常用方法:
setContentType(String type) 例如:response.setContentType("text/html;charset=utf8")
setCharacterEncoding(String charset) 例如:response.setCharacterEncoding("utf-8")
public class TestServlet extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("能够输出中文信息的Servlet");
out.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>testServlet</servlet-name>
<!-- 类名要写完整,包含包名,注意大小写 -->
<servlet-class>web.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
获取请求参数值得方法:
request.getParameter(name)
request.getParameterValues(name)
表单提交产生乱码:当表单提交时,浏览器会对中文参数值进行编码(表单所在页面的字符集进行编码).Web服务器默认情况下使用iso-8859-1去解码。
解决方法:表单所在页面进行编码:<meta http-equiv="content-type" content="text/javascript;charset=utf-8">--------------request.setCharcterEncoding("utf-8")
解决GET方式时的乱码问题:
设置页面编码,String name = request.getParameter("name"),name = new String(name.getBytes("iso-8859-1"),"utf-8")
返回页面出现乱码:设置response.setContentType("text/.html;charset=utf-8")
Servlet运行步骤:建立连接,请求数据打包,容器解析请求数据报封装成对象,根据web.xml中的配置找到Servlet的service方法,响应打包给浏览器,浏览器生成页面。
重定向:服务器向浏览器发送一个302状态码和Location消息头的响应,浏览器收到后向Location地址发送请求。
重定向:response.sendRedirect(String url)
特点:地址栏变化,不会共享request和response对象,地址任意。
<url-pattern>/*</url-pattern>
<url-pattern>*.do</url-pattern>
Servlet生命周期:实例化(创建Servlet对象),初始化(调用init方法),就绪(service()),销毁(destroy())
<init-param>
<param-name>student</param-name>
<param-value>kk</param-value>
</init-param>
获取:ServletConfig.getInitParamter("student")
Servelt接口
方法:init(),destroy(),service()
GenericServlet抽象类
方法:实现了init(),destroy()方法,service()没有实现
HttpServlet抽象类
方法:实现了init(),destroy(),service()
ServletContext:
获取方式:
1、GenericServlet的getServletContext()
2、ServletConfig的getServletContext()
3、HttpSession的getServletContext()
4、FilterConfig的getServletContext()
ServletContext上下文的作用和特点:
setAttribute(),removeAttribute,getAttribute()