Struts2学习计划(一)——使用filter模拟struts的机制
Struts机制略解
stuts2的内部主要就是依靠一系列的过滤器来实现的功能。那么如果我们使用filter来完成一部分struts的工作流程又应该怎么做呢
模拟代码(直接上干货了)
首页就是前段代码了:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>filter模拟struts工作机制</title>
</head>
<body>
<a href="product-input.action">Product Input</a>
</body>
</html>
既然是使用了过滤器 那么我们在使用的过程中就需要使用到配置过滤器的功能了。这里我们主要是使用的注解配置
直接上后台代码
package com.struts.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
@WebFilter("*.action")
public class FilterDispatcher implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
/**
* 1.获取servletPath 2.判断servletPath,若其等于"/product-input.action",则转发到
* /WEB-INF/pages/input.jsp 3.若其等于"/product-save.action" 则: 1)获取请求参数
* 2)把请求信息封装成一个对象 3)执行保存操作 4)把Product对象保存到request对象中${param.productName
* } -> ${requestScope.product.productName}
*
*/
HttpServletRequest req = (HttpServletRequest) request;
// 1
String servletPath = req.getServletPath();
System.out.println(servletPath);
String path = null;
if ("/product-input.action".equals(servletPath)) {
path = "/WEB-INF/pages/input.jsp";
}
if ("/product-save.action".equals(servletPath)) {
String productName = request.getParameter("productName");
String productDesc = request.getParameter("productDesc");
String productPrice = request.getParameter("productPrice");
Product product = new Product(null, productName, productDesc, Double.parseDouble(productPrice));
System.out.println("Save Product" + product);
product.setProductId(1001);
request.setAttribute("product", product);
path = "/WEB-INF/pages/details.jsp";
path = "/WEB-INF/pages/input.jsp";
/**
* filter 可以在实现UTF-8之间的变化中可以设置编码 只要在设置拦截的时候相当于拦截
* struts.xml可以在实现的过程中给出 spring的编译器可以在使用的时候,给出最合适的编码方式
*spring 的这个就是这个不一样的结果
*application.xml就是在配置spring的界面
*
*/
}
if (path != null) {
request.getRequestDispatcher(path).forward(request, response);
return;
}
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
实体对象
package com.struts.filter;
public class Product {
private Integer productId;
private String productName;
private String productDesc;
private double productPrice;
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
public double getProductPrice() {
return productPrice;
}
public void setProductPrice(double productPrice) {
this.productPrice = productPrice;
}
public Product(Integer productId, String productName, String produceDesc, double productPrice) {
super();
this.productId = productId;
this.productName = productName;
this.productDesc = produceDesc;
this.productPrice = productPrice;
}
public Product() {
}
@Override
public String toString() {
return "Product [productId=" + productId + ", productName=" + productName + ", produceDesc=" + productDesc
+ ", productPrice=" + productPrice + "]";
}
}

浙公网安备 33010602011771号