采用SSH进行项目实战开发,其中将涉及到jsp页面数据和Java后端逻辑数据的链条。那么怎么样进行链条呢?下面来分享一下心得。
SSH及Struts2、Spring、Hibernate,其中Spring主要负责bean的管理和项目的相关配置工作,Hibernate主要负责持久化及数据库的操作,而Struts就负责和前端页面数据请求的管理,其中就包括了数据链条。先看效果图:
单击提交:
editProduct
单击测试:
struts.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.objectFactory" value="spring"/>
<package name="basicstruts" extends="struts-default">
<action name="*Product" class="productActionBean" method="{1}">
<result name="listProduct">WEB-INF/jsp/product/listProduct.jsp</result>
<result name="listProductAction" type="redirect">listProduct</result>
<result name="editProduct">WEB-INF/jsp/product/editProduct.jsp</result>
</action>
</package>
</struts>
ProductAction类:
package com.how2java.action;
import java.util.List;
import com.how2java.pojo.Product;
import com.how2java.service.ProductService;
public class ProductAction {
ProductService productService;
List<Product> products;
Product product;
public String list() {
products = productService.list();
return "listProduct";
}
public String add() {
productService.add(product);
return "listProductAction";
}
public String test() {
System.out.println(product.getName());
return "listProductAction";
}
public String edit() {
product = productService.get(product.getId());
return "editProduct";
}
public String delete() {
productService.delete(product);
return "listProductAction";
}
public String update() {
productService.update(product);
return "listProductAction";
}
public ProductService getProductService() {
return productService;
}
public void setProductService(ProductService productService) {
this.productService = productService;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
listProduct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@page isELIgnored="false"%>
<div style="margin:0px auto; width:500px">
<table cellspacing="0" border="1" width="100%">
<tr>
<td>id</td>
<td>name</td>
<td>编辑</td>
<td>删除</td>
</tr>
<s:iterator value="products" var="p">
<tr>
<td>${p.id}</td>
<td>${p.name}</td>
<td><a href="editProduct?product.id=${p.id}">编辑</a></td>
<td><a href="deleteProduct?product.id=${p.id}">删除</a></td>
</tr>
</s:iterator>
</table>
<br>
<br>
<form action="addProduct" method="post">
name: <input name="product.name"> <br>
<button type="submit">提交</button>
</form>
<form action="testProduct" method="get">
<input name="product.name">
<button type="submit">测试</button>
</form>
</div>
从图和代码我们可以发现,我们进行提交都是需要先经过struts.xml文件,而该文件中的标签action和jsp中需提交的请求相匹配,action中的name和method非常重要,代码中action=“*Product” method={1},其中*Product
代表所有以Product结尾的请求,就是jsp页面中提交数据的一个请求,如listProduct.jsp页面中form
表单中的action,像testProduct一样,那么就有小伙伴们文怎样去分辨如testProduct和addProduct对应ProductAction中的哪个方法呢, 其实如testProduct前面的test对应ProductAction中方法名,而method={1}和*
的个数相匹配。
在struts.xml中result标签中的listProduct则代表着连接的jsp页面中的方法,其中name和ProductAction中请求的return返回值相匹配。