您的位置:首页 > 编程语言 > Java开发

《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实现的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐