实现步骤Q?/span>
struts
struts-1.2.8-src
web/examples/
upload
JSP
ActionForm
Action
upload.jsp
<html:form action="/UploadSubmit" enctype="multipart/form-data"> (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng)
请选择需要上传的照片
:
(tng) (tng) (tng) (tng) <html:file property="theFile"/>
(tng) (tng) (tng) (tng) <html:submit value="
上传
"/> (tng) (tng) (tng) (tng) (tng)
</html:form>
ActionForm
getter
setter
public class UploadForm extends ActionForm {
(tng) (tng) (tng) protected FormFile theFile;
(tng) (tng) (tng) public FormFile getTheFile() {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) return theFile;
(tng) (tng) (tng) }
(tng) (tng) (tng) public void setTheFile(FormFile theFile) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) this.theFile = theFile;
(tng) (tng) (tng) }
}
theFile
String
boolean
org.apache.struts.upload.FormFile
HTTP
FormFile
FormFile
J
Action
Action
public ActionForward execute(ActionMapping mapping,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ActionForm form,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpServletRequest request,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpServletResponse response)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) throws Exception {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) if (form instanceof UploadForm) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) UploadForm theForm = (UploadForm) form;
(tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng)
//
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) FormFile file = theForm.getTheFile();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) String filename= file.getFileName();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpSession session = request.getSession();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) String path = session.getServletContext().getRealPath("/") + "temp\\" + filename;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) InputStream stream = file.getInputStream();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) OutputStream bos = new FileOutputStream(path);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int bytesRead = 0;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) byte[] buffer = new byte[8192];
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) bos.write(buffer, 0, bytesRead);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) bos.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.info("The file has been written to \""
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) + path + "\"");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) session.setAttribute("imageuploaded","true");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) session.setAttribute("filename",filename);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) // close the stream
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) stream.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) bos.flush();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) bos.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }catch (FileNotFoundException fnfe) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return null;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }catch (IOException ioe) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return null;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //destroy the temporary file created
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) file.destroy();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return mapping.findForward("next");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng)
(tng) (tng)//this shouldn't happen in this example
(tng) (tng) (tng) (tng) (tng) (tng) (tng) return null;
(tng) (tng) (tng) }
temp
<img src=”?gt;
struts
upload
struts-config.xml
ActionForm
Action
<form-bean name="uploadForm"
(tng)type="org.apache.struts.webapp.upload.UploadForm"/>
<action input="/pages/hr/error.jsp" name="uploadForm"
(tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) path="/UploadSubmit" scope="request"
type="org.apache.struts.webapp.upload.UploadAction" validate="true">
(tng) (tng) <forward name="next" path="/pages/hr/input.jsp"/>
</action>
<controller maxFileSize="2M" inputForward="true" />
<action>
validate
true
theFile
controller
?st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="m">2M?/span>
ActionForm
validate
/**
(tng) (tng) (tng) (tng) * Check to make sure the client hasn't exceeded the maximum allowed upload size inside of this validate method.
**/
(tng) (tng) (tng) public ActionErrors validate(ActionMapping mapping,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpServletRequest request) { (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) ActionErrors errors = null;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) //has the maximum length been exceeded?
(tng) (tng) (tng) (tng) (tng) (tng) (tng) Boolean maxLengthExceeded =
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (Boolean) request.getAttribute(
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) errors = new ActionErrors();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) errors.add(
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ActionMessages.GLOBAL_MESSAGE ,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) new ActionMessage("maxLengthExceeded"));
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) errors.add(
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ActionMessages.GLOBAL_MESSAGE ,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) new ActionMessage("maxLengthExplanation"));
(tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng) (tng) (tng) return errors;
(tng) (tng) (tng) }
hook
controller
theFile
request scope
Validate
Action
MySQL
MEDIUMBLOB
BLOB
216-1
64K
MEDIUMBLOB
224-1
16M
/**
(tng)*
(tng)* @param id
(tng)* @param path
(tng)* @return
(tng)*/
public static void saveImage(int id, String path) throws SQLException{
(tng) (tng) (tng) (tng) String time = new java.util.Date().toString();
(tng) (tng) (tng) (tng) Connection conn = null;
(tng) (tng) (tng) (tng) PreparedStatement pstmt = null;
(tng) (tng) (tng) (tng) boolean flag = false;
(tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) conn = DbManager.getConnection();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.info(time + ":saveImage()
DbManager
");
(tng) (tng) (tng) (tng) } catch (SQLException e) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
DbManager
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.error(time + ": saveImage()
");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) throw new SQLException(":saveImage()
");
(tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) pstmt = conn.prepareStatement("UPDATE hr01 SET hr01_photo=? where hr01_id=?");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) FileInputStream in = new FileInputStream(path);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) pstmt.setBinaryStream(1,in,in.available());
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) pstmt.setInt(2,id); (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) pstmt.executeUpdate();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) pstmt.executeUpdate("COMMIT");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.info("
" + path + "
");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) flag = true; (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) }catch(IOException e){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.error("
" + path + "
");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) throw new SQLException("
");
(tng) (tng) (tng) (tng) }catch (SQLException ex) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.error(new java.util.Date() + "Error:Insert into table."
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) + ex.getMessage()); (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.error("
" + path +"
.");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) throw new SQLException("
" + path +"
.");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) } finally {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) pstmt.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) conn.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.info("DbHrinfo saveImage() closed the connection created at " + time);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) } catch (SQLException e) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) }
> (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) if(flag == true){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) File file = new File(path);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if(file.exists()){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) file.delete();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) }
}
pstmt.executeUpdate("COMMIT");
SQL
SQL
textpad
COMMIT
SQL
<img src=”?gt;
AlterImageAction
session
public ActionForward execute(ActionMapping mapping,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ActionForm form,HttpServletRequest request,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpServletResponse response)
throws IOException,ServletException{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) HttpSession session = request.getSession();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) //1.
(tng) (tng) (tng) (tng) String filename = (String)session.getAttribute("filename");
(tng) (tng) (tng) (tng) String path = session.getServletContext().getRealPath("/")
+ "temp\\" + filename;
(tng) (tng) (tng) (tng) File file = new File(path);
(tng) (tng) (tng) (tng) if(file.exists()){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) file.delete();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.info("
" + path + "
");
(tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) //2.
session
(tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) session.removeAttribute("imageuploaded");
(tng) (tng) (tng) (tng) session.removeAttribute("filename"); (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) return mapping.findForward("next"); (tng) (tng) (tng) (tng)
}
ShowImageAction
public ActionForward execute(ActionMapping mapping,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ActionForm form, HttpServletRequest request,
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpServletResponse response)
throws IOException,ServletException{
(tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) if (!DbManager.hasSetDataSource()) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) javax.sql.DataSource dataSource;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) dataSource = getDataSource(request);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) DbManager.setDataSource(dataSource);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) } catch (Exception e) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.error(e.getMessage());
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) mapping.findForward("error");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) String photo_no = request.getParameter("photo_no");
(tng) (tng) (tng) (tng) Connection conn = null;
(tng) (tng) (tng) (tng) Statement stmt = null;
(tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) conn = DbManager.getConnection();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.info("showimage.jsp
DbManager
");
(tng) (tng) (tng) (tng) } catch (SQLException e) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
DbManager
(tng) (tng) (tng) (tng) (tng) (tng) (tng) logger.error(" showimage.jsp
");
(tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) try {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) stmt = conn.createStatement();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) String sql = " SELECT hr01_photo FROM hr01 WHERE hr01_id='" + photo_no + "'";
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ResultSet rs = stmt.executeQuery(sql);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if (rs.next()) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) InputStream in = rs.getBinaryStream("hr01_photo");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int bytesRead = 0;
byte[] buffer = new byte[8192];
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) response.setContentType("image/jpeg");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) response.setContentLength(in.available());
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) OutputStream outs = response.getOutputStream();
(tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) outs.write(buffer, 0, bytesRead);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) outs.flush();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) in.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) rs.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) } else {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) rs.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) response.sendRedirect("error.jsp");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) }catch(SQLException e){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) }finally {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) try{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) stmt.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) conn.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }catch(SQLException ex){
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) return null;
}
execute
response
redirect
session
response
image/jpeg
null
JSP
<image>
Action
struts-config.xml
Action
<action path="/ShowImage"
(tng)type="software.action.ShowImageAction"></action>
JSP
Action
:
<img src="/tibet/ShowImage.do?photo_no=666542">
< p>
]]>