《Struts2框架 》学习之Struts2 的引用(使用filter作为控制器的MVC应用)
2018-03-05 00:00
429 查看
实现MVC(Model,View,Controller)模式的应用程序由3大部分构成
-模型:封装应用程序的数据和业务逻辑(POJO)
-视图:实现应用程序的信息显示功能(JSP)
-控制器:接受来自用户的输入,调用模型层,相应对应的试图组件(Servlet,Filter)
需求
具体实现:
Index.jsp:
<a href="product_input.action">save</a>
关键代码ProductFilter:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//由于请求分别有product_input和product_save,所以需要解析请求地址,并做出相应的处理
///1.获取servletPath
HttpServletRequest httpServletRequest=(HttpServletRequest) request;
String postPath=httpServletRequest.getServletPath();
String path=null;
//2.若其等于/product_input.action
if ("/product_input.action".equals(postPath)) {
path="/input.jsp";
}
//3.若其等于/product_save.action
else if ("/product_save.action".equals(postPath)) {
//获取请求参数
String productName=httpServletRequest.getParameter("productName");
String productDesc=httpServletRequest.getParameter("productDesc");
String productPrice=httpServletRequest.getParameter("productPrice");
//封装到Product对象中
Product p
9aba
roduct=new Product(productPrice, productName, productDesc);
//把对象保存到域对象request中
httpServletRequest.setAttribute("product", product);
path="/show.jsp";
}
//转发到相应的页面
if (path!=null) {
httpServletRequest.getRequestDispatcher(path).forward(request, response);
//加上return ,由于上面已经请求转发了,所以不需要执行chain.doFilter(request, response);
return;
}
chain.doFilter(request, response);
}input页面<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'input.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
Save:<br>
<form action="product_save.action">
productName:<input type="text" name="productName"><br>
productDesc:<input type="text" name="productDesc"><br>
productPrice:<input type="text" name="productPrice"><br>
<input type="submit" value="Add"><br>
</form>
</body>
</html>当我们在input页面输入完完数据提交后发起请求
ProductFilter对象拦截后解析,处理数据后保存到域对象后转请求转发到show.jsp
,最后show.jsp通过表达式显示在页面
总结:
确实可以用Filter作为控制器的MVC,
使用FIlter的好处?
使用一个过滤器来作为控制器可以方便的在应用程序里对所有的资源进行访问控制
Servlet VS Filter
1,servlet可以完成的Filter都可以完成。例如ServletConfig,ServletContext.
2,拦截资源却不是Servlet所擅长的!Filter中有FilterChain,这个API在Servlet中没有 下篇正式是Struts2的,而Struts2正是使用Filter实现的
相关文章推荐
- (01)Struts2_使用 Filter 作为控制器的 MVC 应用
- [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC
- struts2之使用Filter作为控制器的MVC
- 1.struts2:使用Filter作为控制器的MVC
- struts2:使用Filter作为控制器的MVC
- Struts2-1 使用Filter作为控制器的MVC
- Struts2_001_使用 Filter 作为控制器的 MVC
- 10001---使用 Filter 作为控制器的 MVC
- 使用filter作为控制器的MVC
- 使用Servlet作为控制器的的MVC的应用-登录验证
- 使用Filter作为控制器的MVC
- struts2-(1)使用Filter作为控制器
- 深度学习框架TensorFlow学习与应用(三)——使用交叉熵作为代价函数
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
- Struts2 学习之路(一):从一个filter 控制器开始学习 Struts2
- MVC使用Controller代替Filter完成登录验证(Session校验)学习笔记5
- 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射
- (asp.net mvc学习)ASP.NET MVC ActionFilter的学习与使用
- Strut2_使用Filter作为控制器的MVC应用
- 1. 使用Filter 作为控制器