关于Struts的相关介绍,在此就不做详细介绍。由于很多架构上的缺陷,现在很多企业都选择了Struts2,但是很多企业很多老项目需要维护,所以还是很有必要对struts1做些必要的了解,而且对学习struts2有很多好处。
我这里用的是Struts1.3.8。
一、准备工作
1.下载Struts1.3.8
2.安装myEclipse6.0或以上版本
3.在myEclipse下创建web project,我这里定义名称为struts1.3
4.将Struts1.3.8解压,将lib目录下的jar包拷到工程WebRoot--WEB-INF--lib目录下
二、安步骤开始 Struts1
1.配置WEB-INF目录下的web.xml文件
插入如下XML文件
<servlet> <servlet-name>ActionServlet</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> <!--服务启动时就启用--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
以上配置的意思是:用户访问任何以 .do 结尾的文件,都请求ActionServlet做处理,详细配置访问>/WEB-INF/struts-config.xml配置文件。
2 。 我这里要处理一个用户注册的页面,页面比较简短,只有三个字段username,password,email
所以得创建一个RegisterFormBean,而注册请求交给RegisterAction来处理
2.1创建RegisterFormBean 继承ActionForm
import org.apache.struts.action.ActionForm;
public class RegisterFormBean extends ActionForm {
private String username;
private String password;
private String email;
//getters&setters
}
2.2 创建RegisterAction类,继承Action
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;
import com.fly31.formbean.*;
public class RegisterAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
RegisterFormBean registerForm = (RegisterFormBean) form;
String username = registerForm.getUsername();
String password = registerForm.getPassword();
String email = registerForm.getEmail();
try {
System.out.println("用户名:" + username + "密码:" + password + "邮箱"
+ email);
request.setAttribute("message", "注册成功!!");
} catch (Exception e) {
request.setAttribute("message", "注册失败!!");
}
return mapping.findForward("message");
}
}
3.配置>/WEB-INF/struts-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="registerForm" type="com.fly31.formbean.RegisterFormBean"> </form-bean> </form-beans> <action-mappings> <action path="/register" name="registerForm" type="com.fly31.action.RegisterAction"> <forward name="message" path="/message.jsp" /> </action> </action-mappings> </struts-config>
4.创建JSP页面,我这里就在index.jsp上编写
插入如下代码到body内
<form action="${pageContext.request.contextPath }/register.do" method="post">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
电子邮箱:<input type="text" name="email"><br/>
<input type="submit" value="注册">
</form>
5.由于要显示一些信息,所以创建message.jsp页面
在body标签内出入如下标签
<body>
${message }
</body>
三、在注册过程中如果输入中文会出现乱码问题。这里在配置一个中文乱码过滤器
1、创建类com.fly31.filter.WebFilter.java
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;
public class WebFilter implements Filter {
// 字符编码
String encoding = null;
public void destroy() {
encoding = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 判断字符编码是否为空
if (encoding != null) {
// 设置request编码格式
request.setCharacterEncoding(encoding);
// 设置response编码格式
response.setContentType("text/html;charset=" + encoding);
}
// 传递给下一个过滤器
chain.doFilter(request, response);
}
/**
* 初始化的时候设置编码方式
*/
public void init(FilterConfig filterConfig) throws ServletException {
// 获取初始化参数
encoding = filterConfig.getInitParameter("encoding");
}
}
2.修改web.xml文件
在根目web-app下添加如下xml代码
<filter> <!-- 过滤器的名 --> <filter-name>WebFilter</filter-name> <!-- 过滤器所在完整包路径 --> <filter-class>com.fly31.filter.WebFilter</filter-class> <init-param> <!-- 变量名 --> <param-name>encoding</param-name> <!-- 变量值 --> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 过滤器映射 --> <filter-mapping> <!-- 映射过滤器的名字 --> <filter-name>WebFilter</filter-name> <!-- 过滤器范围,/*表示在这个工程目录下对所有的文件都有效 --> <url-pattern>/*</url-pattern> </filter-mapping>