MVC三层架构
三层架构
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
MVC
-
Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型(domain)或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
-
View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
-
Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。
Filter(过滤器)
什么是Filter
Filter:过滤器 ,用来过滤网站的数据;
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理
Filter开发过程
- 导入包
- 实现javax.servlet包下的Filter接口
- 在web.xml中配置Filter
注:1. 过滤器中的所有代码,在过滤特定请求时都会执行,比如下面案例中:只要请求路径为/a/*,都会执行过滤器中代码
注:2.必须要让过滤器继续通行,将请求向下提交,即实现doFilter()方法中第三个参数特有的doFilter()方法:
例:通过Filter过滤器解决乱码问题
- 过滤器编写
public class CharacterEncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html");
servletResponse.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
- 响应类编写
public class filterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Date date = new Date();
String s = date.toLocaleString();
resp.getWriter().write("访问时间为:"+s);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- web.xml中配置
<servlet>
<servlet-name>filterServlet</servlet-name>
<servlet-class>Servlet.filterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>filterServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>Filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/a/*</url-pattern>
</filter-mapping>
运行结果
Listener(监听器)
实现:在线人数监听
public class lister implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer counter = (Integer) context.getAttribute("Counter");
if(counter==null){
counter=1;
}else{
counter++;
}
context.setAttribute("Counter",counter);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer counter = (Integer) context.getAttribute("Counter");
if(counter==null){
counter=0;
}else{
counter--;
}
context.setAttribute("Counter",counter);
}
}
<listener>
<listener-class>lister.lister</listener-class>
</listener>