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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino IDE 配置文件

最近学习Arduino。 Arduino开源硬件和Arduino IDE是一个很容易上手的系统。 目前arduino已经支持很多种板类型&#xff0c;甚至已经支持了部分arm芯片。比如arduino ng、arduino uno、arduino mini、pro mini等。但是大多数情况&#xff0c;都是使用的atmega8/at…

vue封装axios接口

一、安装axios axios安装命令&#xff1a;cnpm install axios 二、在文件中引用axios 一开始我是放在src下的main.js这个文件里面&#xff0c;后来发现mounted钩子读取接口方法为undefined&#xff0c;百度了才发现是vue生命周期的原因&#xff0c;最好的解决办法是把axios单独…

编写Arduino支持的C++类库

以下为摘抄的例子&#xff0c;已经亲自验证过&#xff0c;例子是正确的 我们在上一讲中实现了一个TN901红外温度传感器51程序到Arduino程序的转换&#xff0c;如果代码越来越多这样程序的可维护性会随之降低&#xff0c;也不适合团度开发。我们应该把常用的文件封装成C库&#…

【机器学习实战】——常见函数积累

目录 第二章 k近邻算法 1、array.sum(axies 1) : 2、array.argsort(axies0/1) 3、array.tile(mat,(m,n)) 4、dict.get(key,value) 5、sorted函数 6、string.strip()函数 7、string.split() 8、scatter&#xff08;&#xff09;函数 9、min()&max() 10、enumera…

安装oracle 11g 客户端,检查过程中报物理内存不足的解决

今早接到同事电话&#xff0c;说安装oracle 11g客户端的时候&#xff0c;在检查先决条件的时候&#xff0c;报错&#xff0c;说内存不足&#xff0c;但是本机的内存是2G&#xff0c;肯定够用&#xff1a;如图&#xff1a; 找了一圈&#xff0c;原来Oracle执行先决条件检查是依赖…

Codeforces Round #401 (Div. 2) D. Cloud of Hashtags

题目链接&#xff1a;D. Cloud of Hashtags 题意&#xff1a; 给你n个字符串&#xff0c;让你删后缀&#xff0c;使得这些字符串按字典序排列&#xff0c;要求是删除的后缀最少 题解&#xff1a; 由于n比较大&#xff0c;我们可以将全部的字符串存在一个数组里面&#xff0c;然…

史陶比尔机器人的 LLI (Low Level Interface)

史陶比尔机器人的 LLI &#xff08;Low Level Interface&#xff09; 史陶比尔机器人拥有 Low Level Interface (LLI)接口选项. 在CS8C控制器的时代&#xff0c;LLI 接口仍然可用。这是一个选项接口。.这是除了VAL3编程语言之外的替代操作系统。通过C程序替代你的程序。 这里的…

HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测

HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测 示例程序源码&#xff08;加注释&#xff09; 获取系统关于“空白区域储存的设置” get_system (‘store_empty_region’, StoreEmptyRegion)系统“空白区域储存”设置为 ‘false’ set_system (‘store_empty_regi…

单片机平台的最小偏差圆弧插补算法

在CNC机床的G代码中&#xff0c;最常见的有G0、G1、G2、G3代码&#xff0c;分别表示直线和圆弧插补&#xff0c;直线插补对于单片机来说&#xff0c;比较容易实现&#xff0c;只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了&#xff0c;但对于圆弧插补&#xff0c;…

【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

Lua基本语法-lua与C#的交互(相当简单详细的例子)

lua脚本 与 C#的交互 本文提供全流程&#xff0c;中文翻译。Chinar坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互准备工作 2C# Create Lu…

漫谈程序员系列:千奇百怪的程序员

干开发时间长了&#xff0c;遇见好多好玩儿的程序员。 看看你躺枪了没。 博客之星评选&#xff0c;点击投我一票&#xff0c;谢谢。投过了也可以点哦&#xff0c;每天都可以投投一票。 留一手 有个哥们儿&#xff0c;在一合资公司做程序员&#xff0c;能力挺强&#xff0c;写…

SCARA机器人与 DELTA机器人

1、SCARA机器人SCARA&#xff08;Selective Compliance Assembly Robot Arm&#xff0c;中文译名&#xff1a;选择顺应性装配机器手臂&#xff09;是一种圆柱坐标型的特殊类型的工业机器人。1978年&#xff0c;日本山梨大学牧野洋发明SCARA&#xff0c;该机器人具有四个轴和四个…

一直以来都没直视的轮播-_-

一直以来做项目碰到轮播图我都是去网站上找现成插件拿来用&#xff0c;现成的插件1是省时间&#xff0c;拿来改改尺寸改改参数就能直接用&#xff0c;2是现在的插件确实很强大&#xff0c;对于我一个刚刚学习前端的人来说&#xff0c;牛人写的轮播我看懂也要花些功夫&#xff0…

HALCON示例程序circles.hdev边界轮廓的圆形拟合

HALCON示例程序circles.hdev边界轮廓的圆形拟合 小哥哥小姐姐觉得有用点个赞呗&#xff01; 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘double_circle’)窗口初始化 dev_close_window () get_image_size (Image, Width, Height) dev_open…

asp.net 微信企业号办公系统-流程设计--保存与发布

如果流程未设计完时可以先保存&#xff0c;以后再打开接着设计。点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计&#xff0c;则可以打开该流程继续设计&#xff1a; 如果流程设计完成&#xff0c;可以点击安装按钮来发布流程&#xff0c;流程安装成功后即加入…

Canny边缘检测算法原理及其VC实现详解(二)

3、 Canny算法的实现流程 由于本文主要目的在于学习和实现算法&#xff0c;而对于图像读取、视频获取等内容不进行阐述。因此选用OpenCV算法库作为其他功能的实现途径&#xff08;关于OpenCV的使用&#xff0c;作者将另文表述&#xff09;。首先展现本文将要处理的彩色图片。 …

IDEA注册jar包使用和常用插件

IDEA注册jar包使用 点击获取下载地址或生成注册码 一、安装完成后&#xff0c;先不启动&#xff0c;首先如下图修改相关的地方。 二、启动IDEA&#xff0c;并且激活IDEA IDEA插件仓库 IntelliJ IDEA Plugins 一、Maven Helper 我一般用这款插件来查看maven的依赖树。在不使用此…

Android Monkey压力测试

一. JAVA环境的搭建 安装jdk-8u151-windows-x64,可以到官网或者应用中心下载.JAVA环境变量的搭建: 在"我的电脑"-"属性"-"高级"-"环境变量"中,点击新建,填写变量名为JAVA_HOME,变量值为JAVA安装的路径.在系统变量中找到Path,点击编辑,…

bzoj 4517: [Sdoi2016]排列计数

4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 637 Solved: 396[Submit][Status][Discuss]Description 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a;1 ~ n 这 n 个数在序列中各出现了一次若第 i 个数 A[i] 的值为 i&#x…