[原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.MVC 设计模式概览:

实现 MVC(Model、View、Controller) 模式的应用程序由 3 大部分构成:

   1)模型:封装应用程序的数据和业务逻辑:POJO(Plain Old Java Object)

   2)视图:实现应用程序的信息显示功能:JSP

   3)控制器:接收来自用户的输入,调用模型层,响应对应的视图组件:Servlet,Filter

2. 使用 Filter 作为控制器的好处 使用一个过滤器来作为控制器, 可以方便地在应用程序里对所有资源(包括静态资源)进行控制访问.:<url-pattern>*.action</url-pattern>

Servlet VS Filter

Servlet 能做的 Filter 是否都可以完成 ? 嗯。 Filter 能做的 Servlet 都可以完成吗 ? 拦截资源却不是 Servlet 所擅长的! Filter 中有一个 FilterChain,这个 API 在 Servlet 中没有!

3.demo

  

  

代码

index.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10
11
12     <a href="product-input.action">Product Input</a>
13 </body>
14 </html>

input.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>input page</title>
 8 </head>
 9 <body>
10
11     <form action="product-save.action" method="post">
12         ProductName:<input type="text" name="productName"/>
13         <br><br>
14
15         ProductDesc:<input type="text" name="productDesc"/>
16         <br><br>
17
18         ProductPrice:<input type="text"  name="productPrice"/>
19         <br><br>
20
21         <input type="submit"  value="submit" />
22     </form>
23 </body>
24 </html>

detial.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>detail page</title>
 8 </head>
 9 <body>
10
11         ProductId:${requestScope.product.productId }
12         <br><br>
13         ProductName:${requestScope.product.productName }
14         <br><br>
15         ProductDesc:${requestScope.product.productDesc }
16         <br><br>
17         ProductPrice:${requestScope.product.productPrice }
18         <br><br>
19
20
21 </body>
22 </html>

product.java

 1 package com.jason.struts.helloword;
 2
 3 public class Product {
 4
 5     private Integer productId;
 6     private String productName;
 7     private String productDesc;
 8
 9     private double productPrice;
10
11
12
13
14
15     public Product() {
16         super();
17     }
18
19     public Product(Integer productId, String productName, String productDesc,
20             double productPrice) {
21         super();
22         this.productId = productId;
23         this.productName = productName;
24         this.productDesc = productDesc;
25         this.productPrice = productPrice;
26     }
27
28     @Override
29     public String toString() {
30         return "Product [productId=" + productId + ", productName="
31                 + productName + ", productDesc=" + productDesc
32                 + ", productPrice=" + productPrice + "]";
33     }
34
35     public Integer getProductId() {
36         return productId;
37     }
38
39     public void setProductId(Integer productId) {
40         this.productId = productId;
41     }
42
43     public String getProductName() {
44         return productName;
45     }
46
47     public void setProductName(String productName) {
48         this.productName = productName;
49     }
50
51     public String getProductDesc() {
52         return productDesc;
53     }
54
55     public void setProductDesc(String productDesc) {
56         this.productDesc = productDesc;
57     }
58
59     public double getProductPrice() {
60         return productPrice;
61     }
62
63     public void setProductPrice(double productPrice) {
64         this.productPrice = productPrice;
65     }
66
67
68
69 }

FilterDispatcher.java

 1 package com.jason.struts.helloword;
 2
 3 import java.io.IOException;
 4
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.annotation.WebFilter;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 /**
16  * Servlet Filter implementation class FilterDispatcher
17  */
18 @WebFilter("*.action")
19 public class FilterDispatcher implements Filter {
20
21
22
23     public void destroy() {
24
25     }
26
27
28     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
29
30         HttpServletRequest req = (HttpServletRequest)request;
31         //1.获取servletPath
32             String  servletPath = req.getServletPath();
33             System.out.println(servletPath);
34             String path = null;
35         //2.判断 servletPath,若其等于 "/product-input.action", 则转发到WEB-INF/struts/input.jsp
36         if("/struts2/product-input.action".equals(servletPath)){
37             path = "/struts2/input.jsp";
38
39         }
40         //3.若servletPath,为"/product-save.action",则
41          if("/struts2/product-save.action".equals(servletPath)){
42
43              //1) 获取请求参数
44                  String productName = request.getParameter("productName");
45                  String productDesc = request.getParameter("productDesc");
46                  String productPrice = request.getParameter("productPrice");
47
48                  //2) 把请求信息封装我一个Product 对象
49                  Product product = new Product(null, productName, productDesc, Double.parseDouble(productPrice));
50                  //3) 执行保存操作
51                  System.out.println("save Product" + product + "" );
52
53                  product.setProductId(1001);
54                  request.setAttribute("product", product);
55
56                  path = "/struts2/details.jsp";
57
58
59
60
61          }
62         //4.把Product 对象保存到request 中。
63
64         if(path != null){
65             req.getRequestDispatcher(path).forward(request, response);
66             return;
67         }
68
69         chain.doFilter(request, response);
70     }
71
72     public void init(FilterConfig fConfig) throws ServletException {
73
74     }
75
76
77
78
79
80 }

  

时间: 2024-10-26 11:34:08

[原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC的相关文章

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记6:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记95:Hibernate 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签

通用标签和控制标签 第一部分:代码 //前端 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> 访问属性 <a href="<%=contextP

【web开发学习笔记】ibatis学习总结

ibatis学习总结 ibatis数据库配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <

【web开发学习笔记】Hibernate学习总结

hibernate学习笔记 学习笔记部分: 本部分的学习比较容易,代码比较全,也容易理解,可以说是一些记忆性质的东西. 本人在学习过程中没有自己在做笔记,只是参考了网上找的学习笔记,按照那个笔记学习和复习挺快的. 源码中有一些jar包缺失,我在自学的时候也整理了相关的jar包和软件,已经上传,祝大家学习快乐. 相关资源链接: 相关的数据库连接的资源: http://download.csdn.net/detail/licong_carp/7656601 相关的jar包文件: http://dow

[学习笔记] Sencha Cmd 学习笔记 Sencha Cmd是什么

本文地址: http://blog.csdn.net/sushengmiyan/article/details/38295575 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://w

Accelerated C++学习笔记1—&lt;开始学习C++&gt;

第0章 开始学习C++ 1.每次学习一个新的语言,大家都是从Hello, world!开始 // lesson0_1.cpp : 定义控制台应用程序的入口点. //功能:编译并运行Hello,world //时间:2014.5.7 #include "stdafx.h" #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { std::cout<< &

[Linux] 学习笔记之安装学习环境(sshd, lrzsz)

紧接前一篇,在VMWare安装完Linux,这个时候我们要使用远程工具连接到虚拟机上去了,以前一直使用Putty,后来到新公司之后,推荐使用SecureCRT,使用之后,觉得效果不错,但是每次连接都失败,linux新手伤不起,在网上搜啊搜,终于找到解决办法.   搜索了很多资料之后,发现是由于我未在Linux上安装ssh服务导致无法使用SecureCRT连接. 1. 可以使用ssh localhost对此进行测试,具体使用如下: 2. 使用apt-get或者yum安装ssh服务,具体哪种操作系统

iOS学习笔记---c语言学习第七天

结构体 结构体是一种自定义的数据类型 struct 结构体名 { 类型说明符  成员名: … 类型说明符  成员名: }: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { struct teacher{ char name[30]; char sex; int age; char course[30]; }; typedef struct teacher Teacher; Teacher c