TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
这个例子的特点是利用Map封装表单数据和模型层的处理结果在各层中传递。先看web.xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> <Servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>example.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--控制器-->
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>com.gd.action.GdServlet</servlet-class>
</servlet>
<!--拦截.do的请求-->
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
运行图:

一、视图层代码:
1、index.jsp
<%@ page contentType="text/HTML; charset=GBK"%>
<jsp:forward page="/myApp/login.do" />
2、welcome.jsp: <%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>欢迎使用简单的Web框架</title>
</head> <body center>
<H1><font color="red"> 欢迎您使用简单的Web框架 </font> </H1>
<%@ include file="login.jsp" %> </body>
</html> 3、login.jsp: <%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.util.*"%> <%
HashMap infoOut =
(request.getAttribute("infoOut") == null) ? new HashMap() : (HashMap)request.getAttribute("infoOut");
String msg = infoOut.get("msg") == null ? "" : (String)infoOut.get("msg");
%>
<html> <head>
<title>采用简单框架实现用户登录验证</title>
<script language=Javascript>
function submit(target, action) {
form1.target = target;
form1.action.value = action;
form1.submit();
} function check() {
form1.forwardJsp.value="login";
form1.logicName.value="LoginAction";
submit("<%="login_"+session.getId()%>","login");
}
</script>
</head>
<body leftmargin="0" topmargin="0">
<form name="form1" action="/myApp/gd/login.do" method="post">
<H3><font color="red"><%=msg%></font><H3>
用户名:<input type="text" name="username" value=""><br>
密码: <input type="text" name="password" value=""><br>
<input type="button" name="button" value="提交" onClick="return check()">
<input type="reset" name="button" value="重置">
<input type="hidden" name="action" value="">
<input type="hidden" name="forwardJsp" value="">
<input type="hidden" name="logicName" value="">
</form>
<script language=Javascript>
window.name = "<%="login_"+session.getId()%>";
</script>
</body>
</html>
4、登录成功页success.jsp <%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.util.*"%> <%
HashMap infoOut =
(request.getAttribute("infoOut") == null) ? new HashMap() : (HashMap)request.getAttribute("infoOut");
String msg = infoOut.get("msg") == null ? "" : (String)infoOut.get("msg");
%>
<html>
<head> <title>采用框架实现用户注册验证</title> </head>
<H3><font color="red"><%=msg%></font><H3> </body>
</html>
二、控制器代码:GdServlet.java
- package com.gd.action;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.HashMap;
- import javax.servlet.RequestDispatcher;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.log4j.*;
- public class GdServlet extends HttpServlet{
- private Logger logger = Logger.getLogger("this.GdServlet");
- public void init() throws ServletException {
-
- }
- public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- doPost(req, res);
- }
- public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- do_Dispatcher (req, res);
- }
- private void do_Dispatcher (HttpServletRequest req, HttpServletResponse res) {
- try {
-
- String forwardJsp = (String) req.getParameter("forwardJsp");
- String logicName = (String) req.getParameter("logicName");
- logger.info("forwardJsp = " + forwardJsp);
- logger.info("logicName = " + logicName);
- String systemName = "";
- String ss = req.getServletPath();
- //logger.info("ss = " + ss);
- systemName = ss.split("/")[1];
- //logger.info("systemName=" + systemName);
- HashMap infoIn = getRequestToMap(req);
- Action action = (Action) Class.forName(getActionName(systemName,logicName)).newInstance();
- HashMap infoOut = action.doAction(infoIn);
- infoOut.put("systemName", systemName);
- req.setAttribute("infoOut", infoOut);
-
- forward(req, res);
- } catch (Exception e) {
- logger.info(e.toString());
- } finally {
- }
- }
- private HashMap getRequestToMap(HttpServletRequest req) throws Exception {
- req.setCharacterEncoding("GBK");
- HashMap infoIn = new HashMap();
- for (Enumeration e = req.getParameterNames(); e.hasMoreElements() ;) {
- String strName = (String)e.nextElement();
- String[] values = (String[]) req.getParameterValues(strName);
- if (values == null) {
- infoIn.put(strName, "");
- } else if (values.length == 1) {
- infoIn.put(strName, values[0]);
- } else {
- infoIn.put(strName, values);
- }
- }
- return infoIn;
- }
- private String getActionName(String systemName ,String actionName) throws IOException, Exception {
- if (actionName == null) {
- return "com.gd.action.GdAction";
- } else {
- return "com." + systemName + ".action." + actionName;
- }
- }
-
- private void forward(HttpServletRequest req, HttpServletResponse res) throws Exception {
- HashMap infoOut = (req.getAttribute("infoOut") == null) ?
- new HashMap() : (HashMap)req.getAttribute("infoOut");
- String forwardJsp = (String)infoOut.get("forwardJsp");
- logger.info("forwardJsp1="+forwardJsp);
- String sendRedirectJsp = (String)infoOut.get("sendRedirectJsp");
-
- if (null != sendRedirectJsp && !"".equals(sendRedirectJsp)) {
- res.sendRedirect(sendRedirectJsp);
- } else {
- RequestDispatcher rd = req.getRequestDispatcher("/jsp/" + forwardJsp+ ".jsp");
- rd.forward(req, res);
- }
- }
- public void destroy() {
- }
- }
复制代码 三、模型层代码
1、要实现的接口 Action.java
package com.gd.action; import java.util.HashMap; public interface Action {
public HashMap doAction(HashMap infoIn);
}
2、LoginAction.java
- package com.gd.action;
- import java.util.HashMap;
- import com.gd.action.Action;
- public class LoginAction implements Action {
- public HashMap doAction(HashMap infoIn) {
- String action = (infoIn.get("action") == null) ? "" : (String)infoIn.get("action");
- HashMap infoOut = new HashMap();
- if (action.equals("")) infoOut = this.doInit(infoIn);
- else if (action.equals("login")) infoOut = this.doLogin(infoIn);
- return infoOut;
- }
- /**该方法用来实现没有传入动作时要处理的内容
- * @param infoIn
- * @return HashMap
- */
- private HashMap doInit(HashMap infoIn) {
- HashMap infoOut = infoIn;
- try {
- infoOut.put("msg", "请输入用户名和密码");
- } catch(Exception e) {
- e.printStackTrace();
- } finally {
- return infoOut;
- }
- }
-
- /**
- * @param infoIn
- * @return HashMap
- */
- public HashMap doLogin(HashMap infoIn){
- HashMap infoOut = infoIn;
- String username = (infoIn.get("username") == null) ? "" : (String)infoIn.get("username");
- String password = (infoIn.get("password") == null) ? "" : (String)infoIn.get("password");
-
- try {
- //User user = (User)infoIn.getVO();
- //String username = user.getUsername();
- //String password = user.getPassword();
-
- if ("gd".equals(username) && "123456".equals(password)) {
- infoOut.put("forwardJsp", "success");
- infoOut.put("msg", "登录成功");
- } else if ("gd".equals(username) && !"123456".equals(password)) {
- infoOut.put("msg", "密码错误");
- } else if (!"gd".equals(username) && "123456".equals(password)) {
- infoOut.put("msg", "用户名错误");
- } else if (!"gd".equals(username) && !"123456".equals(password)) {
- infoOut.put("msg", "用户名和密码都输入错误");
- } else if ("".equals(username) && "".equals(password)) {
- infoOut.put("msg", "请输入用户名和密码");
- }
- } catch(Exception e) {
- e.printStackTrace();
- } finally {
- return infoOut;
- }
- }
- }
复制代码 3、默认的处理逻辑GdAction.java
- package com.gd.action;
- import java.util.HashMap;
- public class GdAction implements Action{
- public HashMap doAction(HashMap infoIn) {
- String action = (infoIn.get("action") == null) ? "" : (String)infoIn.get("action");
- HashMap infoOut = new HashMap();
- if (action.equals(""))
- infoOut = this.doInit(infoIn);
-
- return infoOut;
- }
-
- /**该方法设置用户登录时页面的初始信息
- * @param infoIn
- * @return HashMap
- */
- private HashMap doInit(HashMap infoIn) {
- HashMap infoOut = infoIn;
- try {
- infoOut.put("sendRedirectJsp", "/myApp/jsp/welcome.jsp");
- } catch(Exception e) {
- e.printStackTrace();
- } finally {
- return infoOut;
- }
- }
-
-
- }
复制代码
源码下载:http://file.javaxxz.com/2014/11/5/000051031.zip |
|