利用jsp和Servlet实现自己的原生JavaEE MVC框架

MVC是什么我就不多说了,我们平时做JavaWeb项目时,大都会用SSH框架的不同组合,那能不能不用SSH框架来实现一个原生的MVC框架呢?

下面就让我们来实现一个自己的javaWeb MVC框架。

项目结构如下:

Controler的实现:

package com.shu.controler;

import java.io.IOException;

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

import com.shu.action.Action;
import com.shu.action.ActionFactory;

/**
 * ControlerServlet,控制器类,所有的以.action结尾的请求都会被改控制器拦截,
 *例如:http://localhost:8080/mvc/LoginAction.action
 * @author Administrator
 *
 */
public class ControlerServlet extends HttpServlet {

	/**
	 *
	 */
	private static final long serialVersionUID = 4660044561652707132L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String pathName = req.getServletPath();
		System.out.println("pathName:" + pathName);

		int index = pathName.indexOf(".");
		String actionName = pathName.substring(1,index);
		System.out.println("actionName:" + actionName);

		String actionClass = getInitParameter(actionName);
		System.out.println("actionClass:" + actionClass);

		Action action = ActionFactory.getAction(actionName);
		String viewUrl = action.execute(req, resp);
		if (viewUrl == null) {
			req.getRequestDispatcher("error.jsp").forward(req, resp);
		} else {
			req.getRequestDispatcher(viewUrl).forward(req, resp);
		}
	}

}

Action接口:

package com.shu.action;

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

/**
 * Action 接口,所有的业务action类都需要实现此接口
 * execute方法返回view资源的引用字符串,比如“admin/login.jsp”
 *
 * @author Administrator
 *
 */
public interface Action {

	public String execute(HttpServletRequest request, HttpServletResponse response);

}

Action工厂:

package com.shu.action;

import com.shu.actions.LoginAction;

/**
 * 该工厂根据传入的Action名字返回具体的业务action实例
 * @author Administrator
 *
 */
public class ActionFactory {

	public static Action getAction(String actionName) {
		if (LoginAction.class.getSimpleName().equals(actionName)) {
			return new LoginAction();
		}
		return null;
	}

}

用户登录业务Action:

package com.shu.actions;

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

import com.shu.action.Action;

/**
 * 处理用户登录的action类
 * @author Administrator
 *
 */
public class LoginAction implements Action {

	@Override
	public String execute(HttpServletRequest request,
			HttpServletResponse response) {
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		request.setAttribute("username", username);
		request.setAttribute("password", password);
		if (username != null && username.trim().length() != 0
				&& password != null && password.trim().length() != 0) {
			return "admin/success.jsp";
		}
		return "admin/login.jsp";
	}

}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<servlet>
		<servlet-name>controlerServlet</servlet-name>
		<servlet-class>com.shu.controler.ControlerServlet</servlet-class>
		<init-param>
			<param-name>LoginAction</param-name>
			<param-value>com.shu.actions.LoginAction</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>controlerServlet</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>
</web-app>

视图View层:login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Login</title>
</head>
<body>
	<form action="<%=request.getContextPath() %>/LoginAction.action" method="post">
		username:<input type="text" name="username"/><br>
		password:<input type="password" name="password"/><br>
		<input type="submit" name="Login"/><br>
	</form>
</body>
</html>

success.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<h1>Success!</h1>
	username:<%=request.getParameter("username") %><p>
	password:<%=request.getParameter("password") %><p>
</body>
</html>

测试:

时间: 2024-11-01 21:32:45

利用jsp和Servlet实现自己的原生JavaEE MVC框架的相关文章

利用jsp和servlet,MySQL实现简易报表

beans包和jdbc包代码不放了,麻烦 Service.java: package service; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List; import beans.Profit;import jdbc.JdbcConn

JAVA(利用jsp+javabean+servlet)实现简易计算器

代码解释基本都在代码中给出 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/loo

JSP与Servlet的关系

http://blog.csdn.net/kaixinbingju/article/details/9409927 Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类. 如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做.):

JSP与Servlet的关系理解

Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类. 如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做.):Servlet.ServletConfig.Serializable,然后通过多重继承产生一个最通用的Servlet

jsp与servlet之间的参数传递【转】

JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 session (不考虑 application)完成传值. 一.JSP -> servlet JSP页面有3种方法向 servlet传值: form表单.URL .其他 <!-- JSP page --> ... <%...... session.setAttribute("testSession","

图解JSP与Servlet的关系

Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容.Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类. 如图所示,Java提供一系列接口类(所谓接口类就是类中所有方法只提供方法声明,不提供任何的方法实现,这些类的实现就留给后继者去做.):Servlet.ServletConfig.Serializable,然后通过多重继承产生一个最通用的Servlet

JSP中(servlet)如何使用定时作业Quartz框架

以下介绍的是在JSP或者servlet中使用定时作业Quartz框架,这篇文章是我大学第二次实习时写的,当时带我的师傅维护一个旧业务系统时需要定时作业处理,因为我之前大三实习的时候接触过,知道有这么个东西,所以师傅交给我处理,特意给我说让我整理出一个文档来交给他作为以后他的参考,因为之前是在spring中集成的,那比较简单实现,现在让我在JSP中实现,不是想象的那么顺利,利用一晚上搞定了,以下为我为师傅整理的参考文档,特意翻出来和分享给大家: 目录 1.JSP项目中引入4个jar包 1 2.we

Jsp与servlet之间页面跳转及参数传递实例(转)

原网址:http://blog.csdn.net/ssy_shandong/article/details/9328985 11. jsp与servlet之间页面跳转及参数传递实例 分类: Java Web2013-07-17 16:24 16461人阅读 评论(12) 收藏 举报 jsp servlet传递参数 目录(?)[-] 1从一个jsp页面跳转到另一个jsp页面时的参数传递 2jsp页面传递参数给servlet 3从servlet到jsp页面中传递参数 4从一个servlet到另一个s

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX