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 + "]";
	}

}

posted @ 2017-07-16 18:22  startor  阅读(158)  评论(3)    收藏  举报