Servlet&JSP学习笔记①

133 阅读4分钟

简介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常用的是GETPOST请求方法: 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``ServletRequestListenerHttpSessionListener
属性监听器:ServletContextAttributeListenerServletRequestAttributeListenerHttpSessionAttributeListener。方法如:attributeAdded/Removed/Replaced()
会话绑定、解除监听器:HttpSessionBindingListenerHttpSessionActivationListener。\