javaWeb第二周
session:
维护服务器和客户端联系的一种技术
当浏览器访问服务器时,服务器会创建一个Session对象,(HttpSession) Map结构存储;
该对象有一个唯一的标识
然后服务器在默认的情况下,使用cookie技术
当浏览器下一次访问服务器时,将对应得sessionId传给服务器
服务器根据客户端传递的sessionId找到对应的Session对象
然后进行数据操作。
不同于cookie,session将信息留在服务器端,每一次请求对应一个session对象。
创建session:
request.getSession();//默认:request.getSession(true);
true:
浏览器发送请求服务器会检查是否存在sessionId。如果没有,则返回一个新的Session对象;如果有服务器会检查对应得sessionId是否存在对应的Session对象,有,则用原来的;没有,返回新的Session对象 。
false:
浏览器发送请求,服务器会检查是否存在sessionId。如果没有则返回null;如果有,服务器会检查对应得sessionId是否存在对应的Session对象。有,则用原来的;没有,返回null。
常用的方法:
session.setAttribute(String key,Object value);//设置session
session.getAttribute(String key);//得到sessionvalue
session.invalidate();//销毁session对象
session是对话,关闭浏览器session自动销毁。
过滤器:Filter
过滤器是web规范中的一种类型
作用:可以在访问Servlet之前和之后添加一些功能
常用于:
日志打印 编码处理 安全控制 权限控制等
开发:
1.编写过滤器类
1.实现Filter接口
doFilter方法
2.在web.xml配置过滤器
作用域 范 围 (小—->大)
pageContext 当前页面
request 同一个请求
session 同一个会话
application 整个应用
ServletContext:
服务器启动的时候,会为已经部署到服务器的应用创建一个唯一的对象(这个对象实现了ServletContext接口,这个实现是服务器实现的)
该对象一直存在,它的调用跟整个应用相关。
常用于:
1·绑定数据,使用时注意线程安全问题
setAttribute() getAttribute() removeAttribute()
2.可以访问全局的初始化参数
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>
application.getInitParameter("name")
3.可以访问跟整个应用相关的一些方法
获取ServletContext对象
ServletContext application = req.getServletContext();
ServletContext applicationInfo = getServletConfig().getServletContext();
ServletContext applicationSession = req.getSession().getServletContext();
EL表达式和JSTL标签
作用:使jsp页面中不再java代码
语法: ${表达式}
写法:
1.它能访问作用域
从小到大 pageContext--->request--->session--->application
取值顺序
jsp引擎先执行pageContext.getAttribute("key")查找数据
如果找不到 依次到request,session,application作用域去查找
如果在某个作用域查找到数据
则将该数据以html的形式输出
如果所有区域找不到则什么都不显示
也可以使用
${requestScope.name}<br/>
${pageScope.name}<br/>
${sessionScope.name}<br/>
${applicationScope.name}<br/>
来取对应作用域中的值
2.可以访问属性
${对象.属性名}
这里的属性指得是,具有get/set方法(有没有这个属性无所谓)
3.访问请求参数
语法:
${param.参数名}
4.访问自定义方法
1.在java程序中定义方法
public static
2.配置方法
定义一个.tld文件(xml格式)
放在WEB-INF下
3.在jsp的EL表达式中的使用
taglib
指令:
page
include
taglib
JSTL标签库
官方提供的一套标签库
需要jstl库
常用就俩
<c:if>
<c:forEach>
三层
在实际开发中,一般情况下,将一个项目分成3个类
三层分为
action层 表示层
1.做显示逻辑
2.数据格式的验证
3.和用户进行交互
4.调用service中的方法
service层 业务层
1.处理核心的业务逻辑
2.交叉业务处理(事务,日志,安全,缓存等)
3.调用Dao中得方法
dao层 持久层
只做单一的数据持久化操作
action 表示层model
constant 常量
dao 持久层接口 以I为开头
dao.impl 持久层的实现
entity 实体
exception 异常
service service层接口
service.impl service实现
util 工具包
vo 显示对象 view object
通俗来讲,就是dao层接口,dao.impl实现dao方法,进行数据库增删修改等操作,然后在service层接口,service.impl实现service层,service.impl层调用dao,dao.impl是dao的多态,故service.impl调用dao.impl的方法,再到action层中这样调用。。就是互相调
好处:
1.开发人员只需要关心其中某一层
2.可以很容易的用新的实现来代替原有结构中的一层
3.可以降低层与层之间的依赖
4.可以更容易实现标准化
5.更有利于复用
6.结构更加的清晰
7.大大降低后期的维护成本和维护时间
坏处:1.增加了开发成本
2.有时候会产生级联修改
3.降低了系统的性能
MVC:
model
数据模型
view
显示逻辑
controller
控制器
是一种软件架构的开发模式
是一种思想
是将一个操作分成三种不同的部分
model:
封装了业务逻辑,对业务逻辑中的数据按一定原则进行加工。
view:封装了显示逻辑。
controller: 协调视图和模型
请求不再直接访问模型和视图
而是统一的交给控制器
由控制器来分配给合适的模型来处理
模型处理之后,也不再返回给视图,而是继续交给控制器
让控制器来选择合适的视图显示,将结果给用户
为什么使用MVC?
1.多个视图可以共享一个模型
2.不同模块方便维护
3.使用只需要关心url
4.方便协同开发
缺点:
1.MVC只是一个设计思想,对于实际的系统,需要做详细的设计
2.增加代码量
MVC和三层的区别
Model模型
action
service
dao
View
action (jsp)
Controller
Servlet/Filter
经典的mvc框架:
struts1
1.引入jar
2.编写案例
1.继承Action
2.配置struts-config
<action-mappings >
<action path="/sayHello" type="com.itany.struts.action.HelloAction">
<forward name="success" path="/hello.jsp"></forward>
</action>
</action-mappings>
path:请求路径
type:包名+类名 继承Action
<forward name="success" path="/hello.jsp"></forward>
name:是继承Action类中方法返回的字符串
path:需要显示的页面(view)
ActionForm
1.封装请求参数
实现方式:
config中配置form-bean
action中通过action的name属性使用form-bean
form-bean继承ActionForm
提供属性和属性get/set方法
如果属性是对象类型 ClassA bean
想向对象中赋值
bean.属性值
注意:对象需要自己创建
exception:异常
1.需要自定义异常类
2.在对应action中配置<exception>标签
type:异常类的 包名+类名
path:返回的错误信息界面 也可在对应的action中配置input标签
key:作为在ApplicationResources文件消息定义的标识
用的也就是MappingDispathAction,就是定义方法,当浏览器接受到请求时,进行拦截,再到path查询对应的。type对应该请求对应的action的包名和类名,再通过parameter调用他下面的方法,进行对应请求的action操作。
下周javaweb项目,心累,感觉学的太多了,只是能看懂java代码,但是凭自己写不出来那种。。忘的也很快,蛋疼。不过看慕课写的canvas计时确实厉害,其实逻辑都不难,只是那些方法自己不会用。。