Web开发模式(MVC设计模式)
1.MVC:(Model-View-Controller)操作流程
显示层View:主要负责接收Servlet传递的内容,并调用JavaBean把内容显示给用户。
控制层Controller:负责所有的用户请求参数,判断请求参数是否合法,根据请求方式调用JavaBean进行处理,把结果返给显示层进行显示。
模型层Model:完成一个独立的业务操作组件。一般以JavaBean或者EJB(分布式组件技术)来定义的。
最关键的是RequestDispatcher接口:因为内容是通过该接口保存到JSP页面技能型显示的。
page、request、session、application
在MCV设计模式中,所有的属性传递以request方式(因为:保存范围越大占用的内存越多)进行传递,可以提升代码的操作性能。
简洁、清晰的JSP页面应包含的内容: 在JSP页面中唯一允许导入的包是java.util。
1.接收属性:接收来至Servlet传递过来的属性。
2.判断语句:判断传递到JSP中的属性是否存在。
3.输出语句:使用迭代输出或者JavaBean输出。
2.过滤器Filter
实现过滤器功能:实现javax.servlet.Filter接口
应用一:编码过滤
在每个JSP页面或者Servlet中,设置字符编码格式request.setCharacterEncoding("UTF-8");可使用Filter进行设置
import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public class EncodingFilter implements Filter {private String charSet;//字符编码 @Overridepublic void destroy() {System.out.println("过滤器已销毁...");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,ServletException {// 执行过滤System.out.println("执行过滤之前:doFilter()");req.setCharacterEncoding(this.charSet); //统一设置编码 chain.doFilter(req, resp);//请求继续传递System.out.println("执行过滤之后:doFilter()");}/*** 在容器启动的时候自动加载,通过getInitParameter()获取配置的初始化参数,只初始化一次。*/@Overridepublic void init(FilterConfig config) throws ServletException {String initParam = config.getInitParameter("encoding");//获取初始化参数this.sharSet = initParam ;System.out.println("过滤器初始化,初始化参数是:" + initParam);} }
web.xml中的配置
<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/jsp/*</url-pattern>
</filter-mapping>
<url-pattern>:表示一个过滤器的过滤位置:/*表示对于根目录下的一切操作都进行过滤;若只过滤某一个或者某个目录,则必须明确写出对应的目录.
应用二:登录验证
import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;public class LoginFilter implements Filter {@Overridepublic void destroy() {}/*** session本身属于HTTP协议的范畴,doFilter()定义的是ServletRequest,* 要想获取session,必须进行向下转型:ServletRequest改成HttpServletRequest,才能使用getSession()获取session对象。*/@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,ServletException {HttpServletRequest hsp = (HttpServletRequest)req;//向下转型HttpSession ss = hsp.getSession();if(ss.getAttribute("userId") != null){ //判断用户是否登录 chain.doFilter(req, resp);}else{req.getRequestDispatcher("login.jsp").forward(req, resp); //跳转到登录页面 }}@Overridepublic void init(FilterConfig arg0) throws ServletException {} }
3.监听器Filter
应用1:对application的监听
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;//对上下文状态的监听public class ServletContextListenner implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent event) {//上下文销毁触发System.out.println("容器销毁" + event.getServletContext().getContextPath());}@Overridepublic void contextInitialized(ServletContextEvent event) {//上下文初始化触发System.out.println("容器初始化"+ event.getServletContext().getContextPath());} }
web.xml配置
<listener><listener-class>com.mxzer.common.listener.ServletContextListenner</listener-class> </listener>
所有Servlet程序必须在web.xml进行配置,配饰顺序如下:
1.先配置过滤器:<filter>、<filter-mapping>
2.再配置监听器:<listener>
3.最后配置Servlet:<servlet> 、<servlet-mapping>
应用2:对Servlet上下文属性的监听,要实现ServletContextAttributeListener接口
应用3:对session的监听
3.1实现HttpSessionListener接口
session销毁的方式:
(1)调用HttpSession中的invalidate()方法
(2)在web.xml中配置session的超时时间
<!-- session 失效时间 单位30分钟 --><session-config><session-timeout>30</session-timeout></session-config>
3.2对session属性的监听,要实现HttpSessionAttributeListener接口,需要在web.xml配置
方式二:使用HttpSessionBindingListener接口
/** * 使用HttpSessionBindingListener * session属性监听:不需要在web.xml中配置 * */ public class ServletContextListenner implements HttpSessionBindingListener {private String loginName; //登录名public ServletContextListenner(String loginName) {this.loginName = loginName;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}@Overridepublic void valueBound(HttpSessionBindingEvent event) {System.out.println("在session中保存登录对象" + this.getLoginName()+"session ID:"+event.getSession().getId());}@Overridepublic void valueUnbound(HttpSessionBindingEvent event) {System.out.println("在session中移除登录对象" + this.getLoginName()+"session ID:"+event.getSession().getId());}}
3.4对request监听
请求状态的监听:实现ServletRequestListenner接口
System.out.println("request请求初始化" +"http://"+ event.getServletRequest().getRomoteAddr());System.out.println("request请求初始化" +"http://"+ event.getServletContext().getContextPath());
属性的监听:实现ServletRequestAttributeListener
System.out.println(event.getNmae() + event.getValue());
转载于:https://www.cnblogs.com/mxzer/p/6437338.html
Web开发模式(MVC设计模式)相关推荐
- web开发模式+三层架构与MVC
一.MCV模式与三层架构 三层架构包括UI.BLL.DAL三层,MVC三层指的是model.view.controller,这两个是有区别的. 三层架构主要注重数据的处理流程,DAL中数据获取与存储, ...
- Web开发模式【Mode I 和Mode II的介绍、应用案例】
开发模式的介绍 在Web开发模式中,有两个主要的开发结构,称为模式一(Mode I)和模式二(Mode II) 首先我们来理清一些概念吧: DAO(Data Access Object):主要对数据的 ...
- 用框架名唬人谁都会,那你知道Web开发模式吗?——莫问前程莫装逼
前言:这两天总结了一些Servlet和JSP里面的知识,写了几篇博客,果然有种"温故而知新"的感觉,学完这些,继续前行,开始整合框架里的知识,框架虽好,可底层原理该掌握的也得掌握, ...
- Web开发模式的探讨
Web开发模式有俩种: 基于服务器端渲染的传统Web开发模式 基于前后端分离的Web开发模式 想必我们都不陌生这俩个概念,前后端分离的开发模式也是非常的火爆,我们今天来探讨一下,这俩个开发模式各自的缺 ...
- Web 开发选 MVC 还是 DDD?
距离上次更新已经有 7 天了,只要停下来一天,就会有第二天,第三天,越是不写,就越不知道写什么.这就是惯性的力量,无论是勤劳还是懒惰,都会产生惯性,于是勤劳者越来越勤劳,懒惰者越来越懒惰,学霸越来越霸 ...
- App原生、混合、纯WEB开发模式的优劣分析
什么叫做原生App? 什么是混合app? 什么是Web App开发? Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统 ...
- HTML5 将改变Web开发模式
HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 技术.HTML 5有两大特点 ...
- Java——Web开发之MVC设计模式的学生信息管理系统(二)
为什么这个标题为"(二)",其实是对于上一个特别简单学生信息管理系统里功能的完善. 所谓的"(一)"在这:学生信息管理系统(一) 系统实现的功能: 实现添加学生 ...
- java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍
好伤心...写登陆注册之前看见一篇很好的博文,没有收藏,然后找不到了. 前几天在知乎上看见一个问题,什么时候感觉最无力. 前两天一直想回答:尝试过google到的所有solve case,结果bug依 ...
最新文章
- 美国政府机构成为接受比特币和比特现金支付税金的政府机构
- PMP-【第11章 项目风险管理】-2021-2-16(220页-251页)
- glibc-2.23学习笔记(一)—— malloc部分源码分析
- 洛谷 P1598 垂直柱状图【字符串】
- mysql 字段加comments_Mysql添加注释(comment)(转)
- R开发(part12)--基于RC的面向对象编程
- Linux的实际操作:文件目录类的实用指令(echo head tail)
- 【训练过程】2) Train the VAEs of domain A and domain B respectively(分别训练域A和域B的VAE)
- [毕业生的商业软件开发之路]系列文章目录规划
- python装饰器使用
- 工业机器人综合教学实训平台
- DBeaver——一款替代Navicat的数据库可视化工具
- Error writing to registry key: RegSetValueEx failed; code 5
- 王阳明:心力是克服万难的本源(附提升心力的12种方法)
- HP台式机清灰后无法启动的解决办法
- 企业邮箱收发信息服务器怎么设置,企业邮箱服务器如何配置POP3和SMTP?
- 低价云 主机虚拟云服务器,低价云 主机虚拟云服务器
- java 文本换行_java写入Excel文本换行
- 1.1统计学的发展史
- Java远程调用BPS流程实现流程运行简单示例
热门文章
- 南加州大学机器视觉实验室_机器学习带动南加州爱迪生的变革
- C语言高级编程:char、signed char 和 unsigned char的使用区别
- 《长调》 :寻找我们共同失去的天堂
- 《誓鸟》是什么小说?
- 在辉腾锡勒我见到了狼
- J-LINK segger 驱动,MDK5.15版本,用于解决**JLink Warning: Mis-aligned memory write: Address: 0x20000000......
- python 双向链表_Python实现双向链表
- caj文件浏览器_caj文件怎么转换成pdf文件?试试这样操作,3步成功转换
- 关于slot、slot-scope的指令的一些操作记录
- 中英翻译(基于百度翻译)