自定义MVC2之优化

本文介绍了一个基于Java的登录表单处理系统,包括LoginForm类的设计、TotalServlet的配置及请求处理流程、Jump类的页面跳转逻辑以及LoginDo的具体业务实现。

首先把文件放出来给大家看一下,需要用到哪些东西

代码实例:

LoginForm:

 

package com.zking.form;

public class LoginForm extends TotalForm{
	private String uname;
	private String upass;
	public LoginForm() {
		super();
	}
	public LoginForm(String uname, String upass) {
		super();
		this.uname = uname;
		this.upass = upass;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpass() {
		return upass;
	}
	public void setUpass(String upass) {
		this.upass = upass;
	}
	@Override
	public String toString() {
		return "LoginForm [uname=" + uname + ", upass=" + upass + "]";
	}
}


TotalForm里面不用写代码,作为一个父类让别人继承就好了

 

TotalServlet:

 

package com.zking.servlet;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Properties;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.form.LoginForm;
import com.zking.form.TotalForm;
import com.zking.servletdo.Jump;
import com.zking.servletdo.TotalDo;

public class TotalServlet extends HttpServlet{
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		try {
			Properties properties=new Properties();
			Properties propertiesObject=new Properties();
			String serverPath=config.getServletContext().getRealPath("/");
			FileInputStream fis=new FileInputStream(serverPath+"WEB-INF/config.properties");
			properties.load(fis);
			
			config.getServletContext().setAttribute("config", properties);
			config.getServletContext().setAttribute("object", propertiesObject);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		
	}
	
	
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		try {
			//1.获取路径
			String uri=req.getRequestURI();
			//2.截取
			uri=uri.substring(uri.lastIndexOf("/")+1, uri.lastIndexOf("."));
			
			//3.获取
			Properties properties=(Properties) req.getSession().getServletContext().getAttribute("config");
			Properties propertiesObject=(Properties) req.getSession().getServletContext().getAttribute("object");
			
			String className=properties.getProperty(uri);
			
			//4.实例化对象
			TotalDo totalDo=(TotalDo) propertiesObject.get(className);
			if(totalDo==null){
				totalDo=(TotalDo) Class.forName(className).newInstance();
				propertiesObject.put(className, totalDo);
			}
			
			//获取表单的值,给了LoginForm
			//获取表单上所有的参数名
			String formUri=uri+"Form";
			String classNameForm=properties.getProperty(formUri);
			
			Class clazzForm=Class.forName(classNameForm);
			TotalForm totalForm=(TotalForm)clazzForm.newInstance();
			
			Enumeration enumeration=req.getParameterNames();
			while(enumeration.hasMoreElements()){
				String paramName=(String) enumeration.nextElement();
				String paramValue=req.getParameter(paramName);
				
				//利用反射技术 获取 LoginForm中所有的set方法
				//拼接方法名
				String menthodName="set"+paramName.substring(0,1).toUpperCase()+paramName.substring(1);
				Method method=clazzForm.getDeclaredMethod(menthodName, String.class);
				method.setAccessible(true);
				//执行方法
				method.invoke(totalForm, paramValue);
			}
			Jump jump=totalDo.execute(totalForm);
			jump.jumpPage(req,resp);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}


jump:

 

 

package com.zking.servletdo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Jump {
	private String url;//跳转到哪里去
	private boolean b;//是否为重定向
	
	public Jump(String url, boolean b) {
		super();
		this.url = url;
		this.b = b;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public boolean isB() {
		return b;
	}
	public void setB(boolean b) {
		this.b = b;
	}
	public Jump() {
		super();
	}
	public void jumpPage(HttpServletRequest req,HttpServletResponse resp){
		try {
			if(b){
				//重定向
				resp.sendRedirect(url);
			}else{
				//转发
				req.getRequestDispatcher(url).forward(req, resp);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
}


LoginDao:

 

 

package com.zking.servletdo;

import com.zking.form.LoginForm;
import com.zking.form.TotalForm;

public class LoginDo implements TotalDo {
	public Jump execute(TotalForm totalForm) {
		LoginForm loginForm=(LoginForm) totalForm;
		System.out.println(loginForm.toString());
		System.out.println("执行登录的业务逻辑");
		return new Jump("index.jsp",true);
	}
}


TotalDo:

 

package com.zking.servletdo;

import com.zking.form.TotalForm;

public interface TotalDo {
	public Jump execute(TotalForm totalForm);
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值