关于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>