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…

HALCON示例程序bottle.hdev、bottlet.hdev瓶体字符OCR的训练和检测

HALCON示例程序bottle.hdev、bottlet.hdev瓶体字符OCR的训练和检测 示例程序源码&#xff08;加注释&#xff09; 1、先介绍bottlet.hdev&#xff08;训练OCR识别文件&#xff09; *定义一个字符串变量FontName &#xff0c;内容是bottle FontName : ‘bottle’ *第一步分割…

【机器学习】神经网络BP理论与python实例系列

理论部分 《机器学习——人工神经网络之发展历史&#xff08;神经元数学模型、感知器算法&#xff09;》 《机器学习——人工神经网络之多层神经网络&#xff08;多层与三层&#xff09;》 《机器学习——人工神经网络之后向传播算法&#xff08;BP算法&#xff09;》 《机…

bzoj1597: [Usaco2008 Mar]土地购买

斜率优化dp。 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn 50000 10;struct Field {long long x,y; } t[maxn]; long long f[maxn],x[maxn],y[maxn]; int q[maxn],l,r; int n,cnt;bool cmp(F…

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库&#…

函数,游标与存储过程的综合应用

--在TOY数据库中完成以下操作use toygo--1、编写一个存储过程&#xff0c;接收任意一个订单号&#xff0c;打印订单的表头数据。格式如下&#xff1a;--(其中订单编号由订单日期订单号的字符串组成)--订单编号:20010520000001 订货日期:2001-05-20 订货人:拉尔森create pro…

HALCON示例程序check_blister.hdev药品胶囊检测

HALCON check_blister.hdev药品胶囊检测 示例程序源码&#xff08;加注释&#xff09; 显示、读入图片、设置显示字体等&#xff0c;之前的帖子已经介绍过了 dev_close_window () dev_update_off () read_image (ImageOrig, ‘blister/blister_reference’) dev_open_window_f…

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

目录 第二章 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执行先决条件检查是依赖…

智能时代 软件赋能——2017中国软件技术大会

由中国科学院软件研究所、中科软科技股份有限公司联合主办&#xff0c;北京中科凯亚科技有限公司协办的第15届中国软件技术大会将于2017年12月在北京 国家会议中心隆重举行。 毋庸置疑&#xff0c;我们正在迈入智能时代&#xff0c;伴随着物联网、云计算、大数据、人工智能等智…

Arduino 代码机制

新建一个Arduino程序。可是建完就郁闷了&#xff0c;因为只看到了setup和loop函数&#xff0c;却没有基本的c函数。 void setup() {// put your setup code here, to run once: }void loop() {// put your main code here, to run repeatedly: }于是好奇心就来了&#xff0c;当…

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

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

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 示例程序源码&#xff08;加注释&#xff09; 读入图片与显示相关设置 dev_close_window () read_image (Image, ‘blister/blister_mixed_reference’) dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHan…

php类与对象

1.类与对象 对象&#xff1a;实际存在该类事物中每个实物的个体。$a new User(); 实例化后的$a 引用&#xff1a;php的别名&#xff0c;两个不同的变量名字指向相同的内容 封装: 把对象的属性和方法组织在一个类&#xff08;逻辑单元&#xff09;里 继承&#xff1a;以原有的类…

【深度学习系列】基础知识、模型学习

基础知识 原创 【深度学习】——训练过程 原创 【深度学习】——BN层&#xff08;batch normalization&#xff09; 原创 【深度学习】——激活函数&#xff08;sigmoid、tanh、relu、softmax&#xff09; 原创 【深度学习】——损失函数 原创 【深度学习】——梯度下…

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

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

阳狮集团与阿里巴巴全域营销伙伴关系再升级:数据和业务合作将更紧密

3月6日&#xff0c;阿里巴巴集团与全球领先的广告传播集团阳狮集团在上海开启了主题为“新局面新高度”新阶段的合作沟通&#xff0c;未来双方将进行更紧密的数据和业务层面的合作。阿里巴巴集团CMO、阿里妈妈总裁董本洪及阳狮媒体大中华区首席执行官张敬鸾就开放共赢达成共识&…

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

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

#undef 标识符

#undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef 标识符 其中&#xff0c;标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称&#xff0c;那么就会忽略该指令。一旦定义预处理器标识符&#xff0c;它将保持已定义状态且在作用域内&#xff0c;直到程序结束…