📄 servlet.txt
字号:
ASE SE SSE SA PM
三层结构
浏览器--应用服务器--数据库
web服务器--应用服务器: 通用代码,可扩展--规范
web server application server
规范(servlet jsp) 两者都要遵守
container容器--web server
deploy部署:
应用程序--web server--浏览器
Servlet(5天)
基础 原理 first servlet
表单处理
生命周期
资源访问(数据库 mvc)--小项目
持久 状态--会话 cookie
过滤器
监听器
///基础
servlet运行 增强-->request--reponse 服务
作用: 访问远程对象 查询大量信息 多用户协作
common gateway interface CGI
////配置
CATALINA_HOME CLASS_PATH PATH
url: 域名:端口 路径(虚拟,由服务端解析)
servlet 本身不是线程,单例模式,但在服务器产生的线程中运行
webapps/
approot/
WEB-INF/ 受保护
/classes
/lib
/web.xml
虚拟路径:
应用路径 /csg-servlet
资源路径 /test/time.html 开放目录
一般目录: 模块目录 img style js
/////配置TomCat
conf/tomcat-users.xml manager,admin
conf/manager.xml
<resoucelink
////流程:
编写servlet类,实现Servlet接口
init(config) service(req,res) destroy()
getServletConfig getServletInfo
包目录结构放到WEB-INF/classes目录下
web.xml中配置servlet访问路径<url-pattern>
(Servlet)Class.classforName.newInstance()
方法2:
extends HttpServlet(javax.servlet.http.) 已实现接口:Servlet ServletConfig Serializable
doGet(httpreq,httpres) doPost(httpreq,httpres)(用于表单提交动作)
response.setContentType("text/html;charset=gbk")
PrintWriter out=response.getWriter()
out.println()
///生命周期(d2)
默认lazy模式,第一个请求到来时,创建示例
<load-on-startup>2</load-on-startup> 正整数,启动时自动装载(按顺序)
特殊的类加载器--web.xml--加载--newInstance 可访问的无参构造方法--init()
////init初始化参数
<init-param> 封装到ServletConfig中
<param-name>path
<param-value>
getServletConfig.getInistParameter()
getInitParameter("path")
getInitParameterNames()
java.util.enumeration 可以迭代
hasMoreElements() nextElement()
request.getRemoteAddr()
////service
/////并发控制
尽量不使用成员变量,或保证成员变量是线程安全的
req res 不是共享资源,不用考虑并发
重要方法不要写在destroy()中
/////请求参数
getParameter(name) getParameterValues(name)
getParameterNames() getParameterMap()
<input type= name= size= maxlength= >
<form action="url" method="post" enctype="multipart/form-data"
上传附件 req.getInputStream() getContentLength()
/////解析地址栏
req.getContextPath() getServletPath()
/////防止乱码
resp.setContentType() response要写在前面
req.setCharacterEncoding("UTF-8");
servlet 不支持泛型
////destroy
多用于回收资源,close...
***多线程并发
destroy 等待 service(day03 req.CooperationServlet)
///资源访问(d3)
分布式模型
分布式技术(PPT77): jdbc RMI/IIOP(远程方法调用) corba idl
soa eai 整合 web-services EJB
////MVC模式
M业务(实体,持久,服务) --后台
VC交互(视图 控制)--前端
C servet struts
V jsp
策略模式
/////dispatch 转发
注意多线程
ServletContext application=getServetContext(); 从ServletConfig中取得
req.setAttribute("",o) 放入数据
app.getRequestDispatcher(""). 从应用(context)取得转发器, 可以发给自己
rd.forward(req,res) include(req,res) 然后转发请求,响应
getAttribute("")
////通配符:
<url-pattern>*.do
req.getServletPath()
ConnectionFactory
.properties配置文件 路径?? 注释#
.class.getClassLoader().getResourceAsStream("相对路径")
throw new ExceptionInInitializerError("") 初始化语句块 抛Error
直接加main方法测试
////JNDI
connection 以秒为单位 慢
JNDI:ds Ejb 消息队列jmi
javax.naming.* javax.sql.DataSource
Tomcat中需要配置: META-INF/context.xml
ctx=new InitialContext()
ds=ctx.lookup("")
ds.getConnnection
///状态管理(d4)
HTTP 无状态协议
////session 会话
HttpSession 接口
req.getSession()true false
set get removeAttribute
会话机制:
1.cookies sessionId自动默认
2.url rewriting 编写代码,仍以cookie优先
/cart;JSessionidxxxxxxxx?id=2 resp.encodeUrl(url)不支持cookie时使用sessionId
默认超时 conf/web.xml 30分钟
session.setMaxInactiveInterval(1800) 秒
session.invalidate()
////cookie
服务器请求浏览器写cookie
new Cookie("","") 只能是字符串
cookie.setMaxAge() 秒,默认有效期:关闭(窗口或浏览器)即丢失
resp.addCookie()
req.getCookies() 返回Cookie数组
cookie.getName() getValue()
比较:
Session Cookie
存放地点 服务端 客户端
存储对象 Object String
空间大小 有限,每个网站最多几十个
注意事项 内存溢出 隐私
关系 利用cookie跟踪session
api req.getSession() new Cookie()
sess.set get removeAttr() resp.getCookies() addCookies()
sess.setMaxInactiveInterval() setMaxAge(3600)
sess.invalidate()
sess.getId()
作业:
登录 退出 增 改 student
equalsIgnoreCase()
<center> window.location=
缓存 nocache ?? 或加不同的参数
substring(0,path.indexOf(","))
///过滤器(d5)
time.do
*.do
--过滤层 双向<-->资源
wrapper 模式 chain aop面向层面编程
隐形 随时可以撤消,安装
通用 共性
功能:会话管理 字符集转换 登录 点击数
处理数据,加密 xsl样式-->xml
CharArrayWriter
response.sendRedirect("/serv-app/res/login.html") 新的请求,刷新问题
关联 依赖(use)
- - ->
- - -|>
过滤级别:
/a
/a/*
*.a
<dispatcher>request forward include error
<>FORWARD<> 也过滤转发forward的请求
<>REQUEST<>
///监听器
事件源 事件 监听器
callback
生命周期 attribute
ServletContext全局 HttpSession ServletRequest
logs localhost
event.getServletContext()
log("")
<filter>
<listener>
<listener-calss>
</listener>
<servlet>
ctx.setAttribute()
线程--连接池
sessionListener
Iterator 购物车
复习:
request: parameter path attribute state
session: attribute
app: attribute dispatcher log
reponse: print sendRedirect encodeURL addCookie
MVC filter listener
onclick="javascript:history.back()"
.war
value="" 默认值
body onload=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -