Web开发模式(MVC设计模式)
1.MVC:(Model-View-Controller)操作流程
顯示層View:主要負(fù)責(zé)接收Servlet傳遞的內(nèi)容,并調(diào)用JavaBean把內(nèi)容顯示給用戶(hù)。
控制層Controller:負(fù)責(zé)所有的用戶(hù)請(qǐng)求參數(shù),判斷請(qǐng)求參數(shù)是否合法,根據(jù)請(qǐng)求方式調(diào)用JavaBean進(jìn)行處理,把結(jié)果返給顯示層進(jìn)行顯示。
模型層Model:完成一個(gè)獨(dú)立的業(yè)務(wù)操作組件。一般以JavaBean或者EJB(分布式組件技術(shù))來(lái)定義的。
? 最關(guān)鍵的是RequestDispatcher接口:因?yàn)閮?nèi)容是通過(guò)該接口保存到JSP頁(yè)面技能型顯示的。
page、request、session、application
? ?在MCV設(shè)計(jì)模式中,所有的屬性傳遞以request方式(因?yàn)?#xff1a;保存范圍越大占用的內(nèi)存越多)進(jìn)行傳遞,可以提升代碼的操作性能。
?簡(jiǎn)潔、清晰的JSP頁(yè)面應(yīng)包含的內(nèi)容:? 在JSP頁(yè)面中唯一允許導(dǎo)入的包是java.util。
1.接收屬性:接收來(lái)至Servlet傳遞過(guò)來(lái)的屬性。
2.判斷語(yǔ)句:判斷傳遞到JSP中的屬性是否存在。
3.輸出語(yǔ)句:使用迭代輸出或者JavaBean輸出。
?
2.過(guò)濾器Filter
?
實(shí)現(xiàn)過(guò)濾器功能:實(shí)現(xiàn)javax.servlet.Filter接口
應(yīng)用一:編碼過(guò)濾
? ?在每個(gè)JSP頁(yè)面或者Servlet中,設(shè)置字符編碼格式request.setCharacterEncoding("UTF-8");可使用Filter進(jìn)行設(shè)置
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("過(guò)濾器已銷(xiāo)毀...");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,ServletException {// 執(zhí)行過(guò)濾System.out.println("執(zhí)行過(guò)濾之前:doFilter()");req.setCharacterEncoding(this.charSet); //統(tǒng)一設(shè)置編碼 chain.doFilter(req, resp);//請(qǐng)求繼續(xù)傳遞System.out.println("執(zhí)行過(guò)濾之后:doFilter()");}/*** 在容器啟動(dòng)的時(shí)候自動(dòng)加載,通過(guò)getInitParameter()獲取配置的初始化參數(shù),只初始化一次。*/@Overridepublic void init(FilterConfig config) throws ServletException {String initParam = config.getInitParameter("encoding");//獲取初始化參數(shù)this.sharSet = initParam ;System.out.println("過(guò)濾器初始化,初始化參數(shù)是:" + 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>:表示一個(gè)過(guò)濾器的過(guò)濾位置:/*表示對(duì)于根目錄下的一切操作都進(jìn)行過(guò)濾;若只過(guò)濾某一個(gè)或者某個(gè)目錄,則必須明確寫(xiě)出對(duì)應(yīng)的目錄.
?
應(yīng)用二:登錄驗(yàn)證
?
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協(xié)議的范疇,doFilter()定義的是ServletRequest,* 要想獲取session,必須進(jìn)行向下轉(zhuǎn)型:ServletRequest改成HttpServletRequest,才能使用getSession()獲取session對(duì)象。*/@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,ServletException {HttpServletRequest hsp = (HttpServletRequest)req;//向下轉(zhuǎn)型HttpSession ss = hsp.getSession();if(ss.getAttribute("userId") != null){ //判斷用戶(hù)是否登錄 chain.doFilter(req, resp);}else{req.getRequestDispatcher("login.jsp").forward(req, resp); //跳轉(zhuǎn)到登錄頁(yè)面 }}@Overridepublic void init(FilterConfig arg0) throws ServletException {} }?
3.監(jiān)聽(tīng)器Filter
應(yīng)用1:對(duì)application的監(jiān)聽(tīng)
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;//對(duì)上下文狀態(tài)的監(jiān)聽(tīng)public class ServletContextListenner implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent event) {//上下文銷(xiāo)毀觸發(fā)System.out.println("容器銷(xiāo)毀" + event.getServletContext().getContextPath());}@Overridepublic void contextInitialized(ServletContextEvent event) {//上下文初始化觸發(fā)System.out.println("容器初始化"+ event.getServletContext().getContextPath());} }?
web.xml配置
<listener><listener-class>com.mxzer.common.listener.ServletContextListenner</listener-class> </listener>?
? ? ? 所有Servlet程序必須在web.xml進(jìn)行配置,配飾順序如下:
1.先配置過(guò)濾器:<filter>、<filter-mapping>
2.再配置監(jiān)聽(tīng)器:<listener>
3.最后配置Servlet:<servlet>?、<servlet-mapping>
?
應(yīng)用2:對(duì)Servlet上下文屬性的監(jiān)聽(tīng),要實(shí)現(xiàn)ServletContextAttributeListener接口
應(yīng)用3:對(duì)session的監(jiān)聽(tīng)
? ?3.1實(shí)現(xiàn)HttpSessionListener接口
? ?session銷(xiāo)毀的方式:
? (1)調(diào)用HttpSession中的invalidate()方法
? (2)在web.xml中配置session的超時(shí)時(shí)間
<!-- session 失效時(shí)間 單位30分鐘 --><session-config><session-timeout>30</session-timeout></session-config>?
? 3.2對(duì)session屬性的監(jiān)聽(tīng),要實(shí)現(xiàn)HttpSessionAttributeListener接口,需要在web.xml配置
? ? ? 方式二:使用HttpSessionBindingListener接口
/** * 使用HttpSessionBindingListener * session屬性監(jiān)聽(tīng):不需要在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中保存登錄對(duì)象" + this.getLoginName()+"session ID:"+event.getSession().getId());}@Overridepublic void valueUnbound(HttpSessionBindingEvent event) {System.out.println("在session中移除登錄對(duì)象" + this.getLoginName()+"session ID:"+event.getSession().getId());}}?
?3.4對(duì)request監(jiān)聽(tīng)
? ?請(qǐng)求狀態(tài)的監(jiān)聽(tīng):實(shí)現(xiàn)ServletRequestListenner接口
System.out.println("request請(qǐng)求初始化" +"http://"+ event.getServletRequest().getRomoteAddr());System.out.println("request請(qǐng)求初始化" +"http://"+ event.getServletContext().getContextPath());?
? 屬性的監(jiān)聽(tīng):實(shí)現(xiàn)ServletRequestAttributeListener
? ? ? ??
System.out.println(event.getNmae() + event.getValue());?
轉(zhuǎn)載于:https://www.cnblogs.com/mxzer/p/6437338.html
總結(jié)
以上是生活随笔為你收集整理的Web开发模式(MVC设计模式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMWare 安装 Eclipse
- 下一篇: 【开源程序(C++)】获取bing图片并