redirect 和 orward 的区别

forward(直接请求转发)是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个页面中能从中获取新的信息的话,你可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取。



 
 

redirect(间接请求转发)是完全的跳转,浏览器将会得到跳转的地址, 并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,forward更加高效,在forward可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。



 
 

 下面是自己的代码:

             

/**
 * 商品请求处理类
 * @author Administrator
 *
 */
@Controller
@RequestMapping("/admin/goodstype/")
public class GoodsTypeAction {
	GoodsTypeDao goodsTypeDao = null;
	/**
	 * 删除商品
	 * @param code
	 * @return
	 */
	@RequestMapping("/delete")
	public String deletegoodsType(int code){
		goodsTypeDao = new GoodsTypeDao();
		goodsTypeDao.deleteGoodsType(code);
		return "forward:/admin/goodstype/goodstypeList";
		
	}

	/**
	 * 更新修改保存商品
	 * @param goodstype
	 * @return
	 */
	@RequestMapping("/update")
	public String updateGoodsType(GoodsType goodstype){
		goodsTypeDao = new GoodsTypeDao();
		goodsTypeDao.updateGoodsType(goodstype);
		return "redirect:/admin/goodstype/goodstypeList";
	}
}	 

-------------------------------------------------------------------------------------------------------------------------------------

public class GoodsTypeDao extends BaseDao {
	private static final String NAMESPACE_NAME = "com.carshop.mapper.GoodsTypeMapper.";
	/**
	 * 删除指定商品code
	 * @param code
	 * @return
	 */
	public int deleteGoodsType(int code){
		SqlSession session = getSqlSession();
		int count = session.delete(NAMESPACE_NAME+"deleteGoodsType",code);
		session.commit();
		closeSqlSession();
		return count;
	}
	/**
	 * 通过code获取商品详情
	 * @param code
	 * @return
	 */
	public GoodsType getGoodsTypeByCode(String code){
		SqlSession session = getSqlSession();
		GoodsType Goodstype = session.selectOne(NAMESPACE_NAME+"getGoodsTypeByCode",code);
		closeSqlSession();
		return Goodstype;
	}
	/**
	 * 更新修改商品
	 * @param code
	 * @return
	 */
	public int updateGoodsType(GoodsType goodstype){
		SqlSession session = getSqlSession();
		int count = session.update(NAMESPACE_NAME+"updateGoods",goodstype);
		session.commit();
		closeSqlSession();
		return count;
		
	}
}

-------------------------------------------------------------------------------------------------------------------------------

 

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
			"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.carshop.mapper.GoodsTypeMapper">
	<!-- 预编译sql语句,提高重用-->
	<sql id="findgoodstype">
		select * from e_goods_type  
	</sql>
	
	<!-- 获取商品类型-->
	<select id="getGoodsTypeList" resultType="goodsType">
		<include refid="findgoodstype"/>
		order by code asc
	</select>
	<!-- 根据code删除商品-->
	<select id="deleteGoodsType">
		delete from e_goods_type where code = #{code}
	</select>
	<!-- 根据code查询商品 -->
	<select id="getGoodsTypeByCode" resultMap="goodstype">
		<include refid="findgoodstype"/>
		<where>
			code = #{code}
		</where>
	</select>
	<!-- 更新修改商品 -->
	<update id="updateGoods">
		update e_goods_type set name=#{name},remark=#{remark} where code=#{code}
	</update>
	
	<!-- 定义ResultMap -->
	<resultMap type="GoodsType" id="goodstype" autoMapping="true">
		<!-- 定义列和java对象属性的对应关系 -->
		<!-- 映射:column是数据库列名 property是dto的定义名; 我们经常使用定义名来方便获取数据 -->
		<result column="code" property="code"/>
		<result column="name" property="name"/>
		<result column="remark" property="remark"/>
	</resultMap>
</mapper>

 

你可能感兴趣的:(redirect 和 orward 的区别)