Spring与iBATIS整合及Struts1文件的上传与下载1

案例是关于联系人信息列表展示,使用spring+struts+ibatis实现,附件有整个工程文件

 

1.联系人表的创建,使用的是MySQL

CREATE TABLE `contact` (
  `id` int(11) NOT NULL auto_increment,
  `firstName` varchar(20) default NULL,
  `lastName` varchar(20) default NULL,
  `email` varchar(20) default NULL,
  `imgPath` varchar(200) default 'None',
  `imgFileName` varchar(200) default 'None',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=gbk;
 

 

2.联系人的表的映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
          PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
          "http://ibatis.apache.org/dtd/sql-map-2.dtd">
      
<sqlMap namespace="Contact">
    <!--- Showing data by ID -->
    <typeAlias alias="contact" type="cn.com.servyou.ibatis_learn.entity.Contact"/>
    <typeAlias alias="address" type="cn.com.servyou.ibatis_learn.entity.Address"/>
 
    <!-- Contact映射 -->
    <resultMap id="get_user_result" class="contact">   
        <result property="id" column="id"/>    
        <result property="firstName" column="firstName"/>   
        <result property="lastName" column="lastName"/>   
        <result property="email" column="email"/>
        <result property="imgPath" column="imgPath"/>
        <result property="imgFileName" column="imgFileName"/>
        <result property="addresses" column="id" select="Contact.getAddressesByContactId"/>
    </resultMap>      
   
    <!-- Address映射 -->
    <!-- 
    <resultMap id="get_address_result" class="address">
        <result property="id" column="id"/>
        <result property="addressName" column="addressName"/>
        <result property="zipCode" column="zipCode"/>
        <result property="contactId" column="contact_id"/>
    </resultMap>
    -->   
     
         
    <select id="getContactByLastName" resultClass="contact" resultMap="get_user_result" parameterClass="java.lang.String">         
        select * from contact    
        where lastName = #lastName#
    </select>  
   
    <select id="getAllContact" resultClass="contact" resultMap="get_user_result">         
        select * from contact    
    </select>  
      
     <select id="getAddressesByContactId" resultClass="address"  parameterClass="int" >
        select * from address
        where contact_id = #contact_id# 
    </select>  
        
       
    <insert id="insert" parameterClass="cn.com.servyou.ibatis_learn.entity.Contact">          
        insert into  contact  
                       (firstName,lastName,email,imgPath,imgFileName)          
        values
                    (#firstName#, #lastName#, #email#,#imgPath#,#imgFileName#)          
    </insert>    
   
    <delete id="delete" parameterClass="cn.com.servyou.ibatis_learn.entity.Contact">
        delete from contact
        where lastName = #lastName#
    </delete>  
   
    <delete id="deleteContactByLastName" parameterClass="java.lang.String">
        delete from contact         
        where lastName = #value#
    </delete>  
       
    <update id="update" parameterClass="java.lang.Integer">
            update  contact  
                    set email = 'ok@hotmail.com'
            where id = #id#  
    </update>
     
    <update id="updateByLastName" parameterClass="contact">
        update contact
                set email = #email#
            where lastName = #lastName#
    </update>
</sqlMap>   
 

 

 

3.关于联系人的Dao,与Service的实现类的代码就省略了,下面只是给出接口的定义

IContactDao:

 

public interface IContactDao  {
    public List<Contact> findAll() throws DAOException;
   
    public Contact findByLastName(String lastName) throws DAOException;
   
    public void insert(Contact contact) throws DAOException;
   
    public void delete(Contact contact) throws DAOException;
   
    public void deleteByLastName(String lastName) throws DAOException;
     
    public void updateById(Integer id) throws DAOException;
   
    public void updateByLastName(Contact contact) throws DAOException;
   
}
 

 

 

IContactService:

 

public interface IContactService {
    public List<Contact> getAll() throws ServiceException;

    public void addContact(Contact contact) throws ServiceException;

    public void deleteContact(Contact contact) throws ServiceException;
   
    public void deleteContactByLastName(String lastName) throws ServiceException;

    public void updateContactById(Integer id) throws ServiceException;

    public void updateContactByLastName(Contact contact)
            throws ServiceException;

    public Contact findContactByLastName(String lastName)
            throws ServiceException;
} 
 

 

 

4.Spring配置文件

 

 此案例将配置文件分为四个:applicationContext.xml,applicationContext-dao.xml,applicationContext-service.xml,applicationContext-action.xml

 

   1) applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     	http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     	http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:jdbc.properties</value>
			</list>
		</property>
	</bean>
  
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close"> 
		<property name="driverClassName" 
			value="${dataSource.driverClassName}">
		</property>   
		<property name="url" value="${dataSource.url}"></property>
		<property name="username" value="${datasource.username}"></property>
		<property name="password" value="${dataSource.password}"></property>
	</bean>  
      
	<!-- WebLogicNativeJdbcExtractor,WebSphereNativeJdbcExtractor,C3P0NativeJdbcExtractor,
		CommonsDbcpNativeJdbcExtractor,JBossNativeJdbcExtractor,NativeJdbcExtractor,SimpleNativeJdbcExtractor
	-->
	<bean id="nativeJdbcExtractor"
		class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
		lazy-init="true" />

	<bean id="oracleLobHandler"
		class="org.springframework.jdbc.support.lob.OracleLobHandler"
		lazy-init="true">
		<property name="nativeJdbcExtractor">
			<ref local="nativeJdbcExtractor" />
		</property>
	</bean>

	<bean id="sqlMapClient"
		class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation"
			value="classpath:config-sqlmap.xml" />
		<property name="dataSource" ref="dataSource" />
		<property name="lobHandler">
			<ref local="oracleLobHandler" />
		</property>
	</bean> 

	<!-- 事务管理 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!--事物拦截器 -->
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager" ref="transactionManager" />
		<property name="transactionAttributes">
			<props>
				<prop key="*find*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="*get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="*query*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="*insert*">PROPAGATION_REQUIRED</prop>
				<prop key="*update*">PROPAGATION_REQUIRED</prop>
				<prop key="*delete*">PROPAGATION_REQUIRED</prop>
				<prop key="*add*">PROPAGATION_REQUIRED</prop>
				<prop key="*save*">PROPAGATION_REQUIRED</prop>
				<prop key="*remove*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>
	
	<!-- 指明要拦截的类的规则 -->
	<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="beanNames">
			<value>*Service</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>  
			</list>
		</property>
	</bean> 
	<bean
		class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
		<property name="transactionInterceptor"
			ref="transactionInterceptor" />
	</bean>
</beans>
 

   2) applicationContext-dao.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     	http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     	http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<bean id="contactDao"
		class="cn.com.servyou.ibatis_learn.dao.impl.ContactDaoIBatisImpl">
		<property name="sqlMapClient" ref="sqlMapClient" />
	</bean>
	<bean id="adminDao"
		class="cn.com.servyou.ibatis_learn.dao.impl.AdminDaoIBatisImpl">
		<property name="sqlMapClient" ref="sqlMapClient" />
	</bean>
</beans>
 

 

   3) applicationContext-service.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     	http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     	http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<bean id="contactService"
		class="cn.com.servyou.ibatis_learn.service.impl.ContactServiceImpl">
		<property name="contactDao" ref="contactDao" />
	</bean>
	<bean id="adminService"
		class="cn.com.servyou.ibatis_learn.service.impl.AdminServiceImpl">
		<property name="adminDao" ref="adminDao" />
	</bean>
</beans>

   4)applicationContext-action.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     	http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     	http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<bean name="/addContact,/delContact,/updateContact,/queryAllContact,/downContactImg"
		class="cn.com.servyou.ibatis_learn.web.action.ContactAction">
		<property name="contactService" ref="contactService" />
	</bean>
</beans>
	

5.Struts配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
	<data-sources/>
	<form-beans>
		<form-bean name="contactForm"
				   type="cn.com.servyou.ibatis_learn.web.form.ContactForm" />
		<form-bean name="adminForm" 
		           type="cn.com.servyou.ibatis_learn.web.form.AdminForm"/>
		<form-bean name="uploadForm" type="cn.com.servyou.ibatis_learn.web.form.UploadForm"></form-bean>
	</form-beans>
	<global-exceptions>
		<!--  <exception key="errors.exception" type="java.lang.Exception" path="/WEB-INF/pages/common/error.jsp"/>-->
	</global-exceptions>
	<global-forwards /> 
	<action-mappings>
	<!-- 联系人管理Action开始 -->
		<action path="/addContact" 
				type="org.springframework.web.struts.DelegatingActionProxy"
				name="contactForm"
				validate="true"
				input="/queryAllContact.do"
				parameter="doAddContact"
				scope="request">
			<forward name="success"
					 path="/WEB-INF/pages/admin/contact_list.jsp"
					 redirect="false" />
			<forward name="failure" 
					 path="/WEB-INF/pages/common/failure.jsp" 
					 redirect="false" />
		</action>
		<action path="/delContact"  
				type="org.springframework.web.struts.DelegatingActionProxy"
				scope="request" 
				parameter="doDeleteContact">
			<forward name="success" 
					 path="/WEB-INF/pages/admin/contact_list.jsp" redirect="false" />
			<forward name="failure"          
					 path="/WEB-INF/pages/common/failure.jsp" redirect="false" />
		</action>
		<action path="/updateContact" 
				name="contactForm" 
				type="org.springframework.web.struts.DelegatingActionProxy"
				scope="request"
				parameter="doUpdateContact"
				input="/WEB-INF/pages/admin/list_contact.jsp">
			<forward name="success"
					 path="/WEB-INF/pages/common/success.jsp" 
					 redirect="false" />
			<forward name="failure"
					 path="/WEB-INF/pages/common/failure.jsp" 
					 redirect="false" />
		</action>
		<action path="/queryAllContact" 
				type="org.springframework.web.struts.DelegatingActionProxy"
				parameter="doQueryAllContact"
				scope="request">
			<forward name="success"
					 path="/WEB-INF/pages/admin/contact_list.jsp"/>
		</action>
		<action path="/downContactImg"
				type="org.springframework.web.struts.DelegatingActionProxy"
				parameter="doDownloadImgFile"
				scope="request">
		</action>
		<!-- 联系人管理Action结束 -->
		
		<!-- 管理员Action开始 -->
		<!-- input应该理解为是表单验证失败后转向的页面 -->
		<action path="/login" 
				type="cn.com.servyou.ibatis_learn.web.action.AdminAction"
				name="adminForm"
				scope="request">
				<forward name="success" path="/WEB-INF/pages/admin/contact_list.jsp"></forward>
				<forward name="failure" path="/WEB-INF/pages/common/failure.jsp"></forward>
		</action>      
		<action path="/contact_detail"
		        type="cn.com.servyou.ibatis_learn.web.action.ContactDetailAction"
		        scope="request">
		        <forward name="success" path="/WEB-INF/pages/admin/contact_detail.jsp"></forward>
		        <forward name="failure" path="/WEB-INF/pages/common/failure.jsp"></forward>
		        </action>
		<!-- 管理员Action结束 -->	    
	</action-mappings>
	
	<!-- 资源文件开始 -->
	<message-resources parameter="cn.com.servyou.ibatis_learn.ApplicationResource" />
	<!-- 资源文件结束 -->
	
	<!-- spring 2.5.5 ContextLoaderPlugIn在spring-webmvc-struts.jar中 -->
	<!-- Struts插件开始 -->
	<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> 
		<set-property property="contextConfigLocation" 
					  value="/WEB-INF/classes/context/applicationContext.xml,/WEB-INF/classes/context/applicationContext-action.xml,/WEB-INF/classes/context/applicationContext-dao.xml,/WEB-INF/classes/context/applicationContext-service.xml"/>
	</plug-in>
	<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
   		<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
	</plug-in>
	<!-- Struts插件结束 -->
</struts-config>

 

  6.web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name>spring_ibatis_web</display-name>
	<description>
		This project description " how spring and ibatis integration
	</description>
	<!-- 使用ContextLoaderListener加载Spring配置文件,创建Spring容器 -->
	<!--  
		<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
		/WEB-INF/classes/context/applicationContext*.xml
		</param-value> 
		</context-param> 
		<listener>  
		<listener-class>
		org.springframework.web.context.ContextLoaderListener
		</listener-class>
		</listener>
	-->
	
	<!-- struts framework 's controler start -->
	<servlet>
		<servlet-name>action</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>
		<init-param>
			<param-name>debug</param-name>
			<param-value>3</param-value>
		</init-param>
		<init-param>
			<param-name>detail</param-name>
			<param-value>3</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<!-- struts framework 's controler end -->

	<!-- 编码过滤器开始 -->
	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>
			cn.com.servyou.ibatis_learn.web.filter.EncodingFilter
		</filter-class>
		<init-param>
			<description>用于为POST请求设置编码</description>
			<param-name>encoding</param-name>
			<param-value>GBK</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 编码过滤器开始 -->
	
	<!-- 文件上传Servlet开始 -->
	<servlet>
		<servlet-name>UploadFileServlet</servlet-name>
		<servlet-class>cn.com.servyou.ibatis_learn.web.servlet.UploadFileServlet</servlet-class>
		<init-param>
			<param-name>savePath</param-name>
			<param-value>upload</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>UploadFileServlet</servlet-name>
		<url-pattern>/uploadFile</url-pattern>
	</servlet-mapping>
	<!-- 文件上传Servlet结束 -->
	
	<!-- 判断是否已经登录的Filter开始 -->
	<filter>
		<filter-name>LoginJudgeFilter</filter-name>
		<filter-class>
			cn.com.servyou.ibatis_learn.web.filter.LoginJudgeFilter
		</filter-class>
		<init-param>
			<param-name>loginPage</param-name>
			<param-value>/login.jsp</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>LoginJudgeFilter</filter-name>
		<url-pattern>/admin/*</url-pattern>
	</filter-mapping>

	<!-- 判断是否已经登录的Filter结束 -->


	<!-- 配置session超时时间开始 -->
	<session-config>
		<session-timeout>30</session-timeout>
	</session-config>
	<!-- 配置session超时时间结束 -->
	
	<!-- 配置错误页开始 -->
	<error-page>
		<error-code>404</error-code>
		<location>/WEB-INF/common/errorPage404.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/WEB-INF/common/errorPage500.jsp</location>
	</error-page>
	<error-page>
		<error-code>400</error-code>
		<location>/WEB-INF/common/errorPage400.jsp</location>
	</error-page>
	<!-- 配置错误页结束 -->
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>index.html</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.jsp</welcome-file>
		<welcome-file>login.jsp</welcome-file>
		<welcome-file>welcome.html</welcome-file>
		<welcome-file>welcome.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 

   7.ContactForm

 

public class ContactForm extends ValidatorActionForm {
	private static final long serialVersionUID = -1671970332130779842L;

	private Integer id;

	private String firstName; 

	private String lastName;

	private String email;
	
        /**与页面的<input type="file" name="photoFile">对应,sturts1底层使用的apache的
             commons-fileupload来实现对流的封装*/
	private FormFile photoFile;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getFirstName() {
		logger.debug("get property firstName="+firstName);
		return firstName;
	}

	public void setFirstName(String firstName) {
		logger.debug("set property firstName="+firstName);
		this.firstName = firstName;
	}

	public String getLastName() {
		logger.debug("get property lastName="+lastName);
		return lastName;
	}

	public void setLastName(String lastName) {
		logger.debug("set property lastName="+lastName);
		this.lastName = lastName;
	}

	public String getEmail() {
		logger.debug("set property email="+email);
		return email;
	}

	public void setEmail(String email) {
		logger.debug("set property email="+email);
		this.email = email;
	}

  public FormFile getPhotoFile() {
    return photoFile;
  }

  public void setPhotoFile(FormFile photoFile) {
    this.photoFile = photoFile;
  }
}

   8.ContactAction

 

 

public class ContactAction extends MappingDispatchAction {
	private Logger logger = Logger.getLogger(ContactAction.class);
	private IContactService contactService;

	public IContactService getContactService() {
		return contactService;
	}

	public void setContactService(IContactService contactService) {
		this.contactService = contactService;
	}

	public ActionForward doAddContact(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		Contact contact = new Contact();
		ContactForm contactForm = (ContactForm) form;
		FormFile photo = contactForm.getPhotoFile();
		String savePath = this.getServlet().getServletContext().getRealPath("/");
		//保证无论是在Windows还是Linux,或Unix,类Unix都可以部署
		savePath = System.getProperty("os.name").indexOf("Win") >= 0 ? savePath+"\\upload\\image\\":savePath+"/upload/image/";  
		File saveDir = new File(savePath);
		if(!saveDir.exists()){
		  saveDir.mkdirs();
		}
		String fileName = photo.getFileName();
		//获取文件类型
		String suffix =fileName.substring(fileName.indexOf(".")+1);
		//利用当前时间作为文件名,保证文件名的唯一性
		String destFileName = System.currentTimeMillis()+(new Random().nextInt(1000)+24)+"."+suffix;
		File dest = new File(saveDir,destFileName);
		FilesUtil.copyFile(photo.getInputStream(), dest);
		//设置图片在服务器上的存储路径,以及设置图片的文件名称
		contact.setImgPath(destFileName);
		contact.setImgFileName(fileName);
		BeanUtils.copyProperties(contact, form);
		boolean flag = false;
		ActionForward forward = mapping.findForward("failure");
		List<Contact> contacts = new ArrayList<Contact>();
		try {
			contactService.addContact(contact);
			flag = true;
			contacts = contactService.getAll();
			if(photo != null)//销毁临时文件
			  photo.destroy();
			request.setAttribute("contacts", contacts);
		} catch (ServiceException e) {
			logger.error(e.getMessage(), e);
			throw e;
		}
		forward = flag == true ? mapping.findForward("success") : forward;
		return forward;
	}
	
	   public ActionForward doDownloadImgFile(ActionMapping mapping,
           ActionForm form, HttpServletRequest request,
           HttpServletResponse response) throws Exception {
	     //联系人的lastName
	     String contactLastName = request.getParameter("contactLastName");
	     Contact contact = contactService.findContactByLastName(contactLastName);
	     String fileSavePath = getServlet().getServletContext().getRealPath("/");
	     //操作系统类型是否是Windows
	     boolean isWinSystem = System.getProperty("os.name").indexOf("Win") >= 0 ;
	     fileSavePath = fileSavePath + (isWinSystem ? "upload\\image":"upload/image"); 
	     String filePath = fileSavePath + (isWinSystem ? "\\":"/")+contact.getImgPath();
	     File imgFile = new File(filePath);
	     InputStream inputStream = new FileInputStream(imgFile);
	     OutputStream outputStream = response.getOutputStream();
	     //响应头设置附件,以二进流形式下载
	     response.setHeader("Content-Disposition",
             "attachment;filename=" +
             URLEncoder.encode(contact.getImgFileName(), "GBK"));
	     response.setContentType("application/octet-stream");
	     FilesUtil.copyFile(inputStream, outputStream);
	     return null;
	   }

	public ActionForward doDeleteContact(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		logger.debug("enter ContactAction's doDeleteContact method ...");
		String lastName = request.getParameter("lastName");
		logger.debug(lastName);
		boolean flag = false;
		List<Contact> contacts = new ArrayList<Contact>();
		ActionForward forward = mapping.findForward("failure");
		try {
			contactService.deleteContactByLastName(lastName);
			flag = true;
			contacts = contactService.getAll();
			request.setAttribute("contacts", contacts);
		} catch (ServiceException e) {
			logger.error(e.getMessage(), e);
			throw e;
		}
		forward = flag == true ? mapping.findForward("success") : forward;
		return forward;
	}

	public ActionForward doUpdateContact(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		return super.execute(mapping, form, request, response);
	}

	public ActionForward doQueryContact(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		return super.execute(mapping, form, request, response);
	}

	public ActionForward doQueryAllContact(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		logger.debug("enter ContactAction's method doQueryAllContact");
		List<Contact> contacts = new ArrayList<Contact>();
		try {
			contacts = contactService.getAll();
			request.setAttribute("contacts", contacts);
		} catch (ServiceException e) {
			logger.error(e.getMessage(), e);
			throw e;
		}
		if (contacts != null)
			logger.debug(contacts.size());
		request.setAttribute("contacts", contacts);
		return mapping.findForward("success");
	}
}
 

   9.页面contact_list.jsp

 

 

<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@page import="java.net.URLEncoder"%>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%
	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>Contact List</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">
		-->
		<link href="<%=path%>/style/jquery.multiSelect.css" rel="stylesheet" type="text/css">
		<link href="<%=path%>/style/style_default.css" rel="stylesheet" type="text/css">
		<script type="text/javascript" src="<%=path%>/js/jquery.js"></script>
<script type="text/javascript">
 	  /*获取本地上传的照片路径*/  
     function getPath(obj) {  
              if (obj) {  
                  //ie  
                  if (window.navigator.userAgent.indexOf("MSIE") >= 1) {  
                      obj.select();  
                      // IE下取得图片的本地路径  
                      return document.selection.createRange().text;  
                  }  
                  //firefox  
                  else if (window.navigator.userAgent.indexOf("Firefox") >= 1) {  
                      if (obj.files) {  
                          // Firefox下取得的是图片的数据  
                          return obj.files.item(0).getAsDataURL();  
                      }  
                      return obj.value;  
                  }  
                  return obj.value;  
              }  
          }  
          
          /*预览照片*/  
          function previewPhoto(){  
               var picsrc=getPath(document.all.photo_select);  
               var picpreview=document.getElementById("preview");  
               if(!picsrc){   
                return  
               }  
               if(window.navigator.userAgent.indexOf("MSIE") >= 1) {  
                    if(picpreview) {  
                     try{  
                            picpreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = picsrc;  
                           }catch(ex){  
                      alert("文件路径非法,请重新选择!") ;  
                      return false;  
                     }  
                }else{   
                   picpreview.innerHTML="<img src='"+picsrc+"' />";  
                }  
              }  
          }  
          
         /*校验图片大小*/  
          function checkPhoto(){  
              var photo = getPath(document.all.photo_select);  
              if(!photo){  
                  alert("请选择一个本地图片文件!");  
                  return;  
              }  
              var imgObj = new Image();  
              imgObj.src = photo;  
              var width = imgObj.width;  
              var height = imgObj.height;  
              ///获取正确的图片尺寸大小,兼容ie6、7、8  
              try{  
                  if((typeof width=="undefined" || width==0) && (typeof height=="undefined" || height==0)){  
                     var picpreview=document.getElementById("preview");  
                     if(picpreview && picpreview.filters && picpreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src) {  
                        var tempDiv=document.createElement("div");  
                        picpreview.appendChild(tempDiv);  
                        tempDiv.style.width="10px";  
                        tempDiv.style.height="10px";  
                        tempDiv.style.diplay="none";  
                         tempDiv.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);";  
                         tempDiv.ID="previewTemp";  
                         var url=picpreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src;  
                         tempDiv.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src=url;  
                        width=tempDiv.offsetWidth;  
                        height=tempDiv.offsetHeight;  
                        picpreview.removeChild(tempDiv);  
                        }  
                     }  
                 }  
                 catch(e){  
                 }  
              
              if(photo.toLowerCase().indexOf("http://") > - 1){  
              alert("必须提供本机硬盘上的图片上传!");  
              return false;  
             }  
             alert("照片宽:"+width+"像素 \n照片高:"+height+"像素");  
         }  
</script>  
	</head>

	<body>
		<table style="border-color: aqua" border="1" cellpadding="2"
			align="center">
			<tbody>
				<tr>
					<th>
						联系人firstName
					</th>
					<th>
						联系人lastName
					</th>
					<th>
						联系人email
					</th>
					<th>
						联系人头像
					<th>
				</tr>
				<logic:iterate id="contact" name="contacts" indexId="index">
					<tr>
						<td>
							<bean:write name="contact" property="firstName" />
							<a
								href="<%=path%>/contact_detail.do?firstName=<bean:write name="contact" property="firstName"/>"></a>
						</td>
						<td>
							&nbsp;
							<bean:write name="contact" property="lastName" />
							<a
								href="<%=path%>/contact_detail.do?lastName=<bean:write name="contact" property="lastName"/>"></a>
						</td>
						<td>
							&nbsp;
							<font style="color: red;"><bean:write name="contact"
									property="email" /> </font>
						</td>
						<td>
							<div id="contact_Img">
								<img src="<%=path%>/upload/image/<bean:write name="contact" property="imgPath"/>" width="200" height="200">
							</div>
							<br>
							<a href="<%=path%>/downContactImg.do?contactLastName=<bean:write name="contact" property="lastName"/>">下载图片</a>
						</td>
						<td>
							<input type="hidden" id="contactName" value="<bean:write name="contact" property="lastName" />">
							<a href="<%=path%>/delContact.do?lastName=<bean:write name="contact" property="lastName" />">删除</a>
						</td>
					</tr>
				</logic:iterate>
			</tbody>
		</table>

		<hr>
		<html:javascript formName="/addContact"/>
		<html:form action="/addContact" method="post"  enctype="multipart/form-data" οnsubmit="return validateContactForm(this);">
			<table style="elevation: level" border="1" cellspacing="1"
				cellpadding="1" align="center">
				<thead>
					<tr>
						<td colspan="2" align="center">
							添加联系人
						</td>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td align="center">
							联系人firstName
						</td>
						<td>
							<html:text property="firstName" name="contactForm"></html:text><br/>
							<span style="color: red;"><html:errors  property="firstName"/></span>
						</td>
					</tr>
					<tr>
						<td align="center">
							联系人lasttName
						</td>
						<td>
							<html:text property="lastName" name="contactForm"></html:text><br/>
							<span style="color: red;"><html:errors  property="lastName"/></span>
						</td>
					</tr>
					<tr>
						<td align="center">
							联系人email
						</td>
						<td>
							<html:text property="email" name="contactForm"></html:text><br/>
							<span style="color: red;"><html:errors  property="email"/></span>
						</td>
					</tr>
					<TR>
                		<TD  class="Edit_item">照片:</TD>
                		<TD  class="Edit_content">
                		<div id="preview" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale); width:160px;height:180px;border:solid 1px black;">  
                		</div>
              			<br>
                  		<html:file property="photoFile" styleId="photo_select" styleClass="Edit_input"  οnchange="previewPhoto();" size="50"></html:file>
                  		<br>
                  		<input type="button" value="校验图片" οnclick="checkPhoto();"/>
                  		</TD>
              		</TR>
					<tr>
						<td colspan="2" align="center"><html:submit value="添加"></html:submit>
						</td>
					</tr>
				</tbody> 
			</table> 
			<br/>
		</html:form>
	</body>
</html>

  下载演示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值