简介Web应用程序
Web应用程序架构
网络应用程序基本上是C/S架构
服务器上放置文件基本上是HTML(超文本标识语言)格式文件,描述文件在客户端显示时的页面绘制或行为方式
客户端应用程序通常是浏览器(Browser)使用URL(统一资源定位符)指定文件所在位置,通过HTTP(超文本传输协议)与服务器沟通,发送各种请求以取得不同的HTML相应。
HTML
以标签的方式定义文件结构:<html></html>、<head></head>、<title>、<center>、<body>、<br>、<img>、<form>(method=get)、<input>\
URL
协议://主机地址:连接端口/目录/文件名称
URL模式:完整URL模式、目录符合模式“目录/*”交给Servlet处理、扩展名符合模式*.do
HTTP通信协议
基于请求/响应的无状态通信协议。
Servlet和JSP常用的是GET和POST请求方法:
GET:HTTP方法、请求的URL(?)、请求参数(参数名=value,&链接多个参数)、HTTP版本。会出现在地址栏,优先选择缓存,幂等操作
POST:请求参数置于信息体最后。不出现在地址栏,优先选择发送请求至服务端,非幂等。常用于密码、信用卡等保密性高的数据和插入更新删除数据等非幂等操作。
幂等:请求操作是否改变服务器状态,同一个操作重复多次是否返回同样结果。
静态页面和动态页面
静态页面:服务器不对网页文件作任何操作。
动态页面:服务器基于请求参数、表头或实际服务器上的状态,以程序的方式动态产生响应内容再返回给用户。
客户端程序和服务端程序
客户端:Servlet/JSP执行
服务端:JavaScript执行于浏览器
两者通过网络和HTTP进行互动、数据交换或请求、响应。
Servlet/JSP简介
Servlet是使用Java程序语言所编写的一个Java类,通过Web容器(Container)加载、初始化,受到容器管理成为一个Servlet。
容器会将JSP网页转译为Servlet并加载到容器中管理,所有JSP最后都以Servlet的实例存在于容器中。
运行过程
服务器上会运行一个HTTP服务器程序,当收到浏览器请求时,HTTP服务器会设置好与请求相关的信息,调用CGI(Common Gateway Interfaceyyy)程序,CGI程序取得请求相关信息,处理完毕后再将结果转交给服务器,服务器再向浏览器响应结果。
每当请求进入容器时,容器开启一个线程并决定哪个Servlet来处理。JSP会由“.java”被Web容器转译为“.class”,加载到容器中,成为Servlet实例。
编写相关
Servlet类必须继承HttpServlet,转译完的Servlet继承HttpJspBase类,该类也继承于HttpServlet。
简单开发的Sevlet/JSP
简单的Servlet类只需要继承和重写(override)doGet()和doPost等对应HTTP请求的方法即可。
需要设置web.xml(部署描述文件)描述加载以及如何处理Servlet,管理Servlet实例进行服务。\
标签
①<web-app>
②<servlet>:name、class(定义加载哪个类文件)
③<servlet-mapping>:url-pattern逻辑路径
Web应用程序文件组织
FirstServlet
-WEB-INF
-web.xml
-lib\\放置jar文件
-xxx.jar
-classes\\放置类文件含包的层级
-cc
-openhome
-HelloServlet.class
-other
MVC
M:模型通常由Servlet担当
V:视图,JSP返回处理结果画
C:控制器,通常由JOPO担当,封装应用程序状态或业务逻辑
HTTP请求响应处理
HttpServletRequest的使用
常用方法:
getParameter()//返回值为String类型数据,可用Integer.parseInt()方法转换类型
getInputStream()
getHeader()//getIntHeader()
getMethod()
setContentType()
setCharacterEncoding()
getBytes()
getRequestDispatcher()//获取RequestDispatcher实例,运行时指定要转发请求的相对URL网址或绝对URL
-forward()/include()
setAttribute()//设置请求范围属性
getAttribute()//取得查询结果
HttpServletResponse的使用
常用方法:
getWriter()
setContextType()
getHeader()
addHeader()
sendRedirect()
sendError()
getOutputStream()
ServletConfig与ServletContext
ServletContext存放整个应用程序会共享的数据,设置初始参数、属性和监听器。相关方法:
getInitParameter()
getResouceAsStream()
getRequestDispatcher()//以“/”开头指定环境相对路径
setAttribute()
getAttribute()
removeAttribute()
会话管理
①HTML中input标签设type = hidden。常见如调查问卷N页,最后显示结果
②cookie:浏览器保存信息,常见如自动登录。
name
value
setMaxAge
addCookie
③URL重写:GET请求参数的应用,以超链接的方式响应给浏览器<a href = "">,常见于一些仿真搜索某些数据的分页结果。
HttpSession会话管理
HttpSession session = request.getSession();
session.setAttribute("p1q1",p1q1);
HttpSession session = request.getSession();
out.println(session.getAttribute("p1q1",p1q1) + "<br>");
response.encodeURL("");
保存在服务器端的Web容器内,关闭浏览器是浏览器中的Cookie失效。
过滤器与封装器
doFilter()
service()
getInitParameter()
CharacterRequestWrapper()
<filter-mapping>需要配置<servlet-name>或<url-pattern>
监听器
生命周期监听器:contextInitialized()、contextDestroyed(),ServletContextListener``ServletRequestListener和HttpSessionListener。
属性监听器:ServletContextAttributeListener、ServletRequestAttributeListener和HttpSessionAttributeListener。方法如:attributeAdded/Removed/Replaced()。
会话绑定、解除监听器:HttpSessionBindingListener和HttpSessionActivationListener。\