软件152 缑旭浩
1.新建Web Project
2.导入Struts2库文件
3.选择2.1的struts,拦截后缀选择所有
3、新建input.jsp,success.jsp,error.jsp input.jsp代码如下:
1 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 6 <title>Insert title here</title> 7 </head> 8 <body> <h1>简易计算器</h1> <hr> 9 <form action="unit/cal.action" method="post"> 10 <input type="text" name="value1"> <select name="flag"> 11 <option value="+">+</option> <option value="-">-</option> 12 <option value="*">*</option> 13 <option value="/">/</option> </select> 14 <input type="text" name="value2"> 15 <input type="submit" value="计算"> 16 </form> 17 </body> </html>
4、新建com.bjpowernode.struts这个包。
关键的是新建CalAactionForm.java和CalAction.java这两个类的时候需要继承Struts的ActionForm和Action这两个类如下:
CalAactionForm.java 代码如下:
1 package com.bjpowernode.struts; 2 import org.apache.struts.action.ActionForm; @SuppressWarnings("serial") 3 public class CalAactionForm extends ActionForm { 4 private int value1; 5 private String flag; 6 private int value2; 7 public int getValue1() { return value1; } 8 public void setValue1(int value1) { this.value1 = value1; } 9 public String getFlag() { return flag; } 10 public void setFlag(String flag) { this.flag = flag; } 11 public int getValue2() { return value2; } 12 public void setValue2(int value2) { this.value2 = value2; } 13 }
属性要和input.jsp里面的表单数据一致 ActionForm并非单单是获取页面表单的数据,它也可以获取其他的数据,比如说通过超链接传过来的数据。也就是说凡是从页面传递过来的参数都可以注入到ActionForm。
CalAction.java 代码如下:
1 package com.bjpowernode.struts; 2 import javax.servlet.http.HttpServletRequest; 3 import javax.servlet.http.HttpServletResponse; 4 import org.apache.struts.action.Action; 5 import org.apache.struts.action.ActionForm; 6 import org.apache.struts.action.ActionForward; 7 import org.apache.struts.action.ActionMapping; 8 public class CalAction extends Action { 9 @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { CalAactionForm calForm=(CalAactionForm)form; 10 int value1=calForm.getValue1(); 11 String flag=calForm.getFlag(); 12 int value2=calForm.getValue2(); 13 int result=0; 14 try { 15 if("+".equals(flag)){ result=value1+value2; } 16 else if("-".equals(flag)){ result=value1-value2; } 17 else if("*".equals(flag)){ result=value1*value2; } 18 else if("/".equals(flag)){ result=value1/value2; } request.setAttribute("result",result); 19 return mapping.findForward("success"); 20 } 21 catch(Exception e){ e.printStackTrace(); 22 mapping.findForward("error"); } 23 return mapping.findForward("error"); } }
5、配置struts-config.xml
代码如下:
1 <?xml version="1.0" encoding="ISO-8859-1" ?> 2 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> 3 <struts-config> 4 <form-beans> 5 <form-bean name="calForm" type="com.bjpowernode.struts.CalAactionForm"/> </form-beans> 6 <action-mappings> 7 <action path="/unit/cal" type="com.bjpowernode.struts.CalAction" name="calForm" scope="request" > 8 <forward name="success" path="/success.jsp"/> 9 <forward name="error" path="/error.jsp"/> 10 </action> 11 </action-mappings> 12 </struts-config>
struts-config.xml只要更改了就必须重新启动一次Tomcat
6、配置web.xml。
代码如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2017/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 3 <servlet> 4 <servlet-name>action</servlet-name> 5 <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 6 <init-param> <param-name>config</param-name> 7 <param-value>/WEB-INF/struts-config.xml</param-value> 8 </init-param> 9 <init-param> 10 <param-name>debug 11 </param-name> 12 <param-value>2</param-value> 13 </init-param> <init-param> 14 <param-name>detail</param-name> 15 <param-value>2</param-value> 16 </init-param> 17 <load-on-startup>2</load-on-startup> 18 </servlet> 19 <!-- Standard Action Servlet Mapping --> 20 <servlet-mapping> 21 <servlet-name>action</servlet-name> 22 <url-pattern>*.action</url-pattern> 23 </servlet-mapping> 24 </web-app>
7、填写success.jsp,error.jsp代码。
Success.jsp代码如下:
1 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 6 <title>Insert title here</title> 7 </head> 8 <body> 9 ${calForm.value1} 10 ${calForm.flag } 11 ${calForm.value2} = ${result } 12 </body> 13 </html>
Error.jsp代码如下:
1 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 6 <title>Insert title here</title> 7 </head> 8 <body> 9 ${calForm.value1 } 10 ${calForm.flag } 11 ${calForm.value2 } 计算失败! 12 </body> 13 </html>
8、index.jsp代码。
1 <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7 <html> 8 <head> 9 <base href="<%=basePath%>"> 10 <title> 11 My JSP 'index.jsp' starting page 12 </title> 13 <meta http-equiv="pragma" content="no-cache"> 14 <meta http-equiv="cache-control" content="no-cache"> 15 meta http-equiv="expires" content="0"> 16 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 17 <meta http-equiv="description" content="This is my page"> 18 <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> 19 </head> 20 <body> 21 <a href="input.jsp">简易计算器</a> 22 </body> 23 </html>
9.运行项目
选择菜单“Run”—“Run Configurations”,设置如下图:
10.在浏览器中查看结果
地址栏输入“http://localhost:9527/struts-test/”查看结果
经验总结:
这个计算器只实现了最基本的功能,已知的还会有被除数为0的bug,页面显示效果也十分简陋。
不知为何选择拦截后缀的时候只能选择拦截所有,也就是/*,如果选择/action的话不能起作用。
本来想在JSP页面中就指定在action中所用的方法,那样的话struts.xml文件可以少写一些,但是没成功,就用回这种方式了。
一开始不知道MyEclipse可以这样添加Struts2框架,所以使用的方法是:
1.建立Web Project
2.把几个必须要的包放入lib文件夹中使之成为Reference Library
3.写好各个所需要用到的JSP页面
4.复制一个已经写好过滤器的web.xml文件(因为过滤器部分的代码容易写错)
5.编写继承了ActionSupport类的Action(如果是直接使用接收数据的第一种方式action属性的话要写上各自属性的get和set方法,另外写入execute方法作为主要的执行方法,返回SUCCESS等其它常量,具体返回的字符串要与struts.xml中result的name相对应)
6.编写struts.xml(如果希望运行的不是execute方法,要记得在action中添加method属性指定方法名。其实result的name就是执行action后的返回值,不同的返回值指向不同的页面)