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