struts2_helloword实例
- 本文结构:
- struts2开发环境配置
- web-project 结构
- 全部文件代码及内部说明
- 总结
struts2环境配置
- 新建一个web-project工程sturts2_3
- 下载最新版本struts2包 struts-2.3.20-all.zip 解压缩
- 把app/struts2-blank.war解压缩(这里使用的是一个空白的struts2框架)
- 把struts-2.3.20-all\struts-2.3.20\apps\WEB-INF\lib里面的jar全部复制黏贴(ctrl+c /ctrl+v)到新建的sturts2_3的WEBRoot/WEB-INF/lib里面
- 把apps\struts2-blank\WEB-INF 下面的web.xml文件中的Filter相关的信息复制到sturts2_3的WEBRoot/WEB-INF/web.xml里面(详细见后面源码)
把apps\struts2-blank\WEB-INF\classes 下面的struts.xml复制黏贴到新建的struts2_3的src跟目录下并删除标签内的内容,需要自己根据工程文件配置,详细见后面的源码
- 非必要配置:配置dtd文件 可以方便手动配置xml文件,配置之后会有提示信息 配置方法参考 :struts-2.0.dtd配置
工程及文件
源码及说明
- web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name></display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*action</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
- index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
输入PRODUCT:
<a href="product_input.action">product_input</a>
<br><br>
显示PRODUCT:
<a href="product_detail.action">product_input</a>
<br><br>
This is my JSP page. <br>
</body>
</html>
- detail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'detail.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
productId: ${ productId}
<br><br>
productName: ${ productName}
<br><br>
productPrice: ${productPrice}
<br><br>
</body>
</html>
- input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'input.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="product_save.action" method="post">
productName:<input type="text" name="productName"/> <br><br>
productDesc:<input type="text" name="productDesc"/> <br><br>
productPrice:<input type="text" name="productPrice"/> <br><br>
<input type="submit" value="submit"/> <br><br>
</form>
</body>
</html>
- struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 使用package来组织模块
name 属性必须 用于其他的包应用当前包
集成一个包即可继承其中的所有配置 通常继承 struts-default-->
<package name="helloWord" extends="struts-default">
<!-- 配置action 一个struts2的请求就是一个action
name对应一个 struts2请求名不包含扩展名-->
<action name="product_input">
<result>/WEB-INF/pages/input.jsp</result>
</action>
<action name="product_save" class="com.struts2.HelloWord" method="save">
<result>name ="detail">/WEB-INF/pages/detail.jsp</result>
</action>
</package>
</struts>
- product.java
package com.struts2.HelloWord;
public class Product {
private Integer productId;
private String productName;
private String productDesc;
private Double productPrice;
public String save(){
System.out.println(this);
return"detail";
}
@Override
public String toString() {
return "Product [productId=" + productId + ", productName="
+ productName + ", productDesc=" + productDesc
+ ", productPrice=" + productPrice + "]";
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public Double getProductPrice() {
return productPrice;
}
public void setProductPrice(Double productPrice) {
this.productPrice = productPrice;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
}
Notes
- action 代表一个 struts2 请求
- Action类 能处理 struts2 请求的类
- 属性名字必须与javabeans属性名相同规则
- 属性类型可以是任意类型(基本数据类型之间自动转换) 必须有一个不带参数的构造器
- struts2 会为没一个http请求创建一个Action实例