关于Java Web应用程序的若干经验总结

1 篇文章 0 订阅
1 篇文章 0 订阅

最近与木木一起做毕设。作为一个新手,在这里总结开发项目时的一些经验。供诸君参考。

关于Struts

  • <url-pattern></url-pattern>:经常用到的是两种地址格式,即/*和*.action,/*包括*.action。 也就是当服务器接收地址的格式,是以"/"(斜杠)分割的格式,还是以".action"为后缀的格式。一般设置为/*就好了,如果设置为*.action,那么进入主页都需要使用action来触发。
  • xxxxx.action is not available:当出现login.action不能被触发时,通常是有以下几个原因: 
  1. structs.xml中真的没有定义login.action,或者你粗心大意地写成了logim.action;
  2. login.action所在的pakage没有被structs.xml引入或者包名不正确;
  3. action标签中的类名或方法名有误。
  • 要想对表格中的一行进行表单提交,可以直接用<form>标签将<tr>包含即可,MyEclipse会提示警告,但确实可以提交。
  • 男女搭配,干活不累。

关于Hibernate

  • 在对类进行查询时,也可以获取类的对象成员的数据,可以通过类的Set、List成员获取相应的其它类成员集。后者经常是数据库上就是两个表的主外键关系。通过在Hibernate配置文件中设置这些数据成员的Lazy属性,可以立即或延迟加载它们。
  • 当Lazy属性为True时,类的对象成员和Set(或List)成员会直到使用它们的时候才会加载它们,也就是不为空指针。但是如果Session已经关闭,那么就无法延迟加载了。

关于iReport

  • Error Evaluating Expression: Source Text: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{XXX})

             看了网上的一个可能的解决办法:Bruce Phillips Blog on Java, ColdFusion, Flex and Spry: Using The JasperReports Struts2 Plugin, A Main Report, And A Subreport

  • 使用iText和Struts2.x在服务器临时生成PDF供下载:

页面链接   index.jsp

<a href="downloadPDF.action">下载PDF文件</a>

action设置

<package name="DownloadManager" extends="struts-default">

	<action name="downloadPDF" class="com.demo.action.PDFDownloadAction">
		<result name="success" type="stream">
			<param name="contentType">application/pdf</param>
			<param name="inputName">targetFile</param>
			<param name="contentDisposition">attachment;filename="${reportName}.pdf"</param>
			<param name="bufferSize">4096</param>
		</result>
	</action>
	
</package>

Java Action类代码

package com.demo.action;

import org.apache.struts2.ServletActionContext;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;


import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfDocument;
import com.itextpdf.text.pdf.PdfWriter;
import com.opensymphony.xwork2.ActionSupport;

public class PDFDownloadAction extends ActionSupport 
{
	
	private String inputPath;
	
	private String reportName="foodTrace";
	
	public String getInputPath() {
		return inputPath;
	}

	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}
	/**
	 *	设置生成PDF报告的中文名称
	 */
	public String getReportName() {
		try {
			reportName=new String("华丽的逆转".getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return reportName;
	}

	public void setReportName(String reportName) {
		this.reportName = reportName;
	}

	


	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return SUCCESS;
	}

	public InputStream getTargetFile()
	{
//		System.out.println(inputPath);

		ByteArrayOutputStream baos = new ByteArrayOutputStream();  
		ByteArrayInputStream bais=null;

		
		// 建立PDF文档
        Document document = new Document(PageSize.A4);   
        try {
			/*文档与输出流建立连接*/
			PdfWriter.getInstance(document, baos);   
			/*打开文档*/ 
			document.open();   
			/*设置中文字体*/
			BaseFont bfChinese = BaseFont.createFont("STSongStd-Light",   
					"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			Font FontChinese = new Font(bfChinese, 12, Font.NORMAL); 			
			/*添加PDF段落*/
			Paragraph paragraph=new Paragraph("这种华丽的逆转", FontChinese);
			paragraph.add(new Paragraph("Hello iText!"));
			document.add(paragraph);   
			/*关闭文档*/ 
			document.close();
			 /*得到输入流*/     
	        bais = new ByteArrayInputStream(baos.toByteArray());  
	        baos.close();  
 		} catch (Exception e) {
			e.printStackTrace();
		}   
        
       
        return bais; 
//		本地文件下载时使用
//		return ServletActionContext.getServletContext()
//		.getResourceAsStream(inputPath);
	}
}

 

生成的PDF


还不错吧!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值