现在开始加入公司的核心项目,但由于项目开发比较早,所以使用的技术不是很新潮,前台用的还是 struts1 。
虽然不是什么新技术,但仍可以从中学到好多东西的。花了一个晚上的时间终于把 struts1 的流程跑通了。
省略了创建过程及加入 jar 包的过程,直接进入正题。
首页要在 web.xml 中添加相应的 struts 配置:
< servlet >
< servlet-name > action </ servlet-name >
< servlet-class >
org.apache.struts.action.ActionServlet
</ servlet-class >
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
< init-param >
< param-name > debug </ param-name >
< param-value > 2 </ param-value >
</ init-param >
< init-param >
< param-name > detail </ param-name >
< param-value > 2 </ param-value >
</ init-param >
< load-on-startup > 2 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > action </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
然后在 config 所对应的目录下添加 struts 配置文件 struts-config.xml
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd" >
< struts-config >
<!-- ActionForm -->
< form-beans >
<!-- name: 名称 type: 类路径 -->
< form-bean name ="loginForm" type ="com.login.LoginForm">
</ form-bean >
</ form-beans >
<!-- 设置全局 URL ,必须写在 Action 前面,这样任何 Action 都可以使用 -->
< global-forwards >
< forward name ="result" path ="/result.jsp" />
</ global-forwards >
<!-- 注册 Action -->
< action-mappings >
<!-- name :名称 type :类路径 path :客户端( JSP )提交到服务器端时指定的路径( Form 表单中的 action=”/login.do" -->
< action path ="/login" type ="com.login.LoginAction"
name ="loginForm" scope ="request">
<!-- 局部 URL ,只有这个 action 可以使用 -->
< forward name ="success" path ="/success.jsp"></ forward >
< forward name ="error" path ="/error.jsp"></ forward >
</ action >
<action type="com.shiyou.tiles.test.action.TestAction" scope="request" path="/TestAction" name="loginForm" parameter="cmd">
<forward name="sucess" path="/index1.jsp" />
</action>
</ action-mappings >
</ struts-config >
注:Action 和Form 的关系是一个Action 只能对应一个Form (通过Action 的name 属性)
而一个Form 可以被多个Action 调用
LoginAction.java
package com.login;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action (DispatchAction) {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginForm lf = (LoginForm) form;
String username = lf.getUsername();
String password = lf.getPassword();
String errorInfo = "";
String result = UserManager.getInstance().login(username, password);
if (result.equals("success")) {
request.setAttribute("username", username);
return mapping.findForward("success");
} else if (result.equals("username")) {
errorInfo = " 密码错误 ";
} else {
errorInfo = " 用户名错误 ";
}
request.setAttribute("errorInfo", errorInfo);
return mapping.findForward("error");
}
public ActionForward testStrutsAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
TestForm tf = (TestForm) form;
String username = tf.getUsername();
System.out.println("username====" + username);
return mapping.findForward("sucess");
}
}
LoginForm.java
package com.login;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class LoginForm extends ActionForm {
private String username;
private String password;
public void reset(ActionMapping mapping, HttpServletRequest request) {
System.out.println("--------reset()-------------");
super .reset(mapping, request);
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
System.out.println("--------validate()-------------");
return super .validate(mapping, request);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this .username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this .password = password;
}
}
对我个人来说最重要的是前台jsp 页面没有掌握,经常在页面上花费很多时间
在编写JSP 页面时要用struts 标签,而我经常会忘记
引入jsp 标签
<%@ taglib uri="http://struts.apache.org/tags-html " prefix="html " %>
<%@ taglib uri="http://struts.apache.org/tags-bean " prefix="bean " %>
index.jsp
<%@ page language="java " import ="java.util.* " pageEncoding="UTF-8 "%>
<%@ taglib uri="http://struts.apache.org/tags-html " prefix="html " %>
<%@ taglib uri="http://struts.apache.org/tags-bean " prefix="bean " %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">
<html>
<head>
<title> 首页</title>
</head>
<body>
<form action="TestAction.do?cmd=testStrutsAction" method="post">
<div id="conent">
<div id="loginArea">
<span>user login</span>
<table>
<tr>
<td>userName:</td>
<td><input type="text" name="username" id="username" value=""/></td>
</tr>
<tr>
<td>password:</td>
<td><input type="password" name="username" id="username" value=""/></td>
</tr>
<tr>
<td colspan=2><input type="submit" value="submit"/></td>
</tr>
</table>
</div>
</div>
</form>
</body>
</html>
展示结果(将 Action 的返回值展示到 JSP 页面上)
<%@ page language="java " import ="java.util.* " pageEncoding="UTF-8 "%>
<%@ taglib uri="http://struts.apache.org/tags-html " prefix="html "%>
<%@ taglib uri="http://struts.apache.org/tags-bean " prefix="bean "%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN ">
<html>
<head>
<title>Error</title>
</head>
<body>
<bean:write name ="errorInfo " scope="request " />
</body>
</html>