热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

精致小巧的java相册制作方法

这篇文章主要为大家详细介绍了精致小巧的java相册制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下

这里写图片描述

这里写图片描述 

注:
1)html上的图片是静态指定的。当更新了新的图片时必须手工更新。所以使用Servlet读取本地images中的所有图片,动态显示给用户。

2)如果存在中文名的图片,由于get方式无法直接传递中文,会导致出错。

主页面–index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>



 
  
 

 
 
  

小小相册

上传相片 浏览相片

页面显示:

这里写图片描述

上传图片功能:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>



 
  
 

 
  

小小相册

/servlet/uploadServlet" method="post" enctype="multipart/form-data"> 照片:
说明:

package cn.hncu.servlet;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;

import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;
import cn.hncu.utils.MyUtils;

public class UploadServlet extends HttpServlet {


  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println("");
    out.println(" ");
    out.println(" ");
    out.print("错误信息:提交方式错误...不支持Get方式上传照片");
    out.println(" ");
    out.println("");
    out.flush();
    out.close();
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println("");
    out.println(" ");
    out.println(" ");
    //从上传表单提取信息:一,封装成photo值对象,调用dao层存储到后台
    //          二,把上传的照片存储到服务器硬盘
    //数据库:存储照片的存储情况的信息,,,真正的文件存储到硬盘
    DiskFileItemFactory dfi=new DiskFileItemFactory();
    File file=new File("d:/a");
    if(file.exists()){
      file.mkdirs();
    }
    dfi.setRepository(file);
    ServletFileUpload upload=new ServletFileUpload(dfi);
    upload.setSizeMax(1024*1024*8);
    upload.setHeaderEncoding("utf-8");//==>request.setCharacterEncoding("utf-8");
    try {
      List list=upload.parseRequest(request);
      PhotoModel pm=new PhotoModel();
      InputStream in=null;
      for(FileItem fI:list){
        if(fI.isFormField()){//这个不会有临时文件
          String desc=fI.getString("utf-8");
          pm.setDesc(desc);
        }else{
          in=fI.getInputStream();
//         String filename=fI.getFieldName();
//         System.out.println("getFieldName:"+filename);
          String fileName=fI.getName();
//         System.out.println("getName:"+fileName);//测试:C:\Users\adl1\Pictures\Saved Pictures\111.jpg&#63;
          //卫条件
          if(fileName==null||fileName.trim().equals("")){
            out.println("没有选择文件,,,请必须选择一个文件...
"); String strPath2=request.getContextPath()+"/jsps/upload.jsp"; out.println("返回上传页面"); return; } pm.setDt(MyUtils.getCurrentDataime()); String realName=fileName.substring(fileName.lastIndexOf("\\"));//"\112.jpg" System.out.println(realName.substring(1, realName.length())); pm.setRealName(realName.substring(1, realName.length()));//把realName的"\"去掉 //ext扩展名 String ext=fileName.substring(fileName.lastIndexOf(".")); pm.setExt(ext); String id=MyUtils.getUUID(); pm.setId(id); pm.setIp(request.getRemoteAddr()); pm.setDir(MyUtils.getDir(id)); } } //完成photo值对象的封装,调用dao进行存储 boolean boo=new PhotoDaoImpl().sava(pm); if(boo){ //完成数据库的存储,接下来是服务器硬盘的存储 //把照片存储到项目根目录下的photos文件夹中存储(以打散方式存储) String path="photos/"+pm.getDir(); // System.out.println("path:"+path);//测试:photos/9/0 String filePath=getServletContext().getRealPath(path); // System.out.println("filePath:"+filePath);//测试:D:\apache-tomcat-7.0.30\webapps\photosWeb\photos\9\0 File dir=new File(filePath); if(!dir.exists()){ dir.mkdirs(); } FileUtils.copyInputStreamToFile(in, new File(filePath+"/"+pm.getId()+pm.getExt())); // //如果硬盘保存成功就跳转到主页面--转发 //// RequestDispatcher rd=request.getRequestDispatcher(getServletContext().getContextPath()+"/index.jsp");//"/photosWeb/photosWeb/index.jsp" // RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");//"/photosWeb/index.jsp"g // //java代码块和web.xml中url的开始"/"代表项目根目录 // rd.forward(request, response); //这里不能使用转发,具体重定向和转发区别:http://blog.csdn.net/xanlv/article/details/52701085 //重定向 response.sendRedirect(getServletContext().getContextPath()+"/index.jsp"); }else{ //数据库保存失败--留在上传页面 RequestDispatcher rd=request.getRequestDispatcher("/jsps/upload..jsp");//"/photosWeb/index.jsp" rd.forward(request, response); } } catch (FileUploadException e) { throw new RuntimeException("上传失败", e); }finally{//清临时文件 File f=new File("d:/a"); File fs[]=f.listFiles(); for(File ff:fs){ ff.delete(); } } out.println(" "); out.println(""); out.flush(); out.close(); } }

页面显示效果:

这里写图片描述

浏览图片功能:

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;

public class ShowAllImgServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println("");
    out.println(" ");
    out.println(" ");
    String strPath=request.getContextPath()+"/jsps/upload.jsp";
    out.println("返回上传页面");
//String table=""+//这种方式不可以设置水平居中
    String table="
"+ ""; out.println(table); //从dao层把所有的照片信息读取出来发送到前端页面 List list=new PhotoDaoImpl().getAllPhotos(); for(PhotoModel pm:list){ out.println(""); out.println(""); out.println(""); out.println("
下载图片"); out.println(""); } out.println("
文件名上传日期时间相片相片说明操作
"); out.println(""); String path=request.getContextPath()+"/photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt(); //System.out.println(path);//"/photosWeb/photos/d/7/e78e18352b42410f85dbd8df834bd718.jpg" //点击图片可以查看大图 out.println(""); out.println(""); out.println("删除图片"); //out.println("下载图片
"); out.println(" "); out.println(""); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(" "); out.println(" "); out.print("不支持Post方式。。。"); out.println(" "); out.println(""); out.flush(); out.close(); } }

页面显示效果:

删除功能:

package cn.hncu.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;

public class DelPhotoServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println("");
    out.println(" ");
    out.println(" ");
    String id=request.getParameter("id");
    String ip=request.getRemoteAddr();
    PhotoDaoImpl dao=new PhotoDaoImpl();
    PhotoModel pm=dao.getSingleById(id);
    if(pm!=null){
      if(!pm.getIp().equals(ip)){
        out.println("您没有该图片的权限去删除...");
        String strPath=request.getContextPath()+"/servlet/showAllImg";
        out.println("
返回继续浏览"); return ; } //删除包含两部分工作:清除数据库中的信息 和 删除服务器硬盘中的图片文件 //1清除数据库中的信息 boolean boo = dao.del(id); //2删除服务器硬盘中的图片文件 if(boo){ String path="photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt(); String filePath=getServletContext().getRealPath(path); File f=new File(filePath); if(f.exists()){ f.delete(); } String strPath=request.getContextPath()+"/servlet/showAllImg"; // System.out.println(strPath);///photosWeb/servlet/showPhotos out.println("删除成功...
返回浏览"); }else{ out.println("删除数据库信息失败"); } }else{ out.println("文件不存在..."); String strPath=request.getContextPath()+"/servlet/showAllImg"; out.println("
返回继续浏览"); } out.println(" "); out.println(""); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(" "); out.println(" "); out.print("不支持POST方式..."); out.println(" "); out.println(""); out.flush(); out.close(); } }

页面显示:

这里写图片描述

这里写图片描述

这里写图片描述

下载功能:
1.在HTML页面上使用超连接指向要下载的文件(不安全容易被盗链)。
问题:
如何确定本地资源?
ServletContext – 代表一个web项目。一个web项目只有一个ServletContext对像。
getRealPath(“/”); //d:/prm/tom/web/

需求分析:
在实际的开发中,下载哪一个文件,都是由用户动态选择的。
如,在我们项目images目录下,存在着很多图片文件。用户在页面上显示所有图片,用户可以点下载连接下载喜欢的图片。

详细设计:
使用静态网页显示所有图片。给每一个图片一个下以下载的超连接。
在超连接后面传递要下载的图片id。
在serivice中动态接收图片名。完成下载 。

package cn.hncu.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;

import cn.hncu.dao.PhotoDaoImpl;
import cn.hncu.domain.PhotoModel;

public class DownServlet extends HttpServlet {


  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    //获取被下载图片的信息
    tring id=request.getParameter("id");
    PhotoModel pm=new PhotoDaoImpl().getSingleById(id);
    if(pm==null){
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out = response.getWriter();
      out.println("");
      out.println("");
      out.println(" ");
      out.println(" ");
      response.getWriter().println("alert('该文本已不存在...')");
      out.println(" ");
      out.println("");
      out.flush();
      out.close();
      //getServletContext().getContextPath()
      RequestDispatcher rd=request.getRequestDispatcher("/servlet/down");//"/photosWeb/index.jsp"
      //java代码块和web.xml中url的开始"/"代表项目根目录
      rd.forward(request, response);
    }else{

      //真正下载: 把服务器硬盘的照片文件读取出来发送给客户端(设置响应头)
      //获取真实的文件
      String realName=pm.getRealName();
      realName=URLEncoder.encode(realName, "utf-8");//如果是中文名必须转码,防止文件名中文乱码
//   InputStream in=DownServlet.class.getClassLoader().getResourceAsStream(realName);
      //设置显示类型为下载 
      response.setContentType("application/force-download");
      //设置响应头
      response.setHeader("content-Disposition", "attachment;filename=\""+realName+"\"");

//   String path=request.getContextPath()+"/photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt();
      String path="photos/"+pm.getDir()+"/"+pm.getId()+pm.getExt();
      String filePath=getServletContext().getRealPath(path);
      FileUtils.copyInputStreamToFile(request.getInputStream(), new File(filePath));
      InputStream in=new FileInputStream(filePath);
      OutputStream o=response.getOutputStream();
      byte b[]=new byte[1024];
      int len=0;
      while((len=in.read(b))!=-1){
        o.write(b, 0, len);
      }
      o.close();

    }
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("");
    out.println("");
    out.println(" ");
    out.println(" ");
    out.print(" 不支持");
    out.println(" ");
    out.println("");
    out.flush();
    out.close();
  }

}

页面显示效果:

配置文件web.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

 
 
  UploadServlet
  cn.hncu.servlet.UploadServlet
 
 
  ShowAllImgServlet
  cn.hncu.servlet.ShowAllImgServlet
 
 
  DownServlet
  cn.hncu.servlet.DownServlet
 
 
  DelPhotoServlet
  cn.hncu.servlet.DelPhotoServlet
 



 
  UploadServlet
  /servlet/uploadServlet
 
 
  ShowAllImgServlet
  /servlet/showAllImg
 
 
  DownServlet
  /servlet/down
 
 
  DelPhotoServlet
  /servlet/delPhoto
   
 
  index.jsp
 


数据库:photos.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>

  


值对象:PhotoModel.java

package cn.hncu.domain;

public class PhotoModel {

  //photo值对象
  private String id;//UUID
  private String realName;//照片真实文件名
  private String ext;//扩展名
  private String dir;//文件打撒后存储的目录
  private String dt;//上传日期时间
  private String ip;//上传客户端的ip地址
  private String desc;//照片说明
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getRealName() {
    return realName;
  }
  public void setRealName(String realName) {
    this.realName = realName;
  }
  public String getExt() {
    return ext;
  }
  public void setExt(String ext) {
    this.ext = ext;
  }
  public String getDir() {
    return dir;
  }
  public void setDir(String dir) {
    this.dir = dir;
  }
  public String getDt() {
    return dt;
  }
  public void setDt(String dt) {
    this.dt = dt;
  }
  public String getIp() {
    return ip;
  }
  public void setIp(String ip) {
    this.ip = ip;
  }
  public String Dreturn desc;
  }
  public void setDesc(String desc) {
    this.desc = desc;
  }

}

dao层:这里简写了,只写了实现类PhotoDaoImpl.java

package cn.hncu.dao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;

import cn.hncu.domain.PhotoModel;
import cn.hncu.utils.DomFactory;

public class PhotoDaoImpl {

  public boolean sava(PhotoModel pm){
    Document dom=DomFactory.getDom();
    Element root=dom.getRootElement();
    Element e=root.addElement("photo");
    e.addAttribute("id", pm.getId());
    e.addAttribute("dir", pm.getDir());
    e.addAttribute("dt", pm.getDt());
    e.addAttribute("ext", pm.getExt());
    e.addAttribute("ip", pm.getIp());
    e.addAttribute("realName", pm.getRealName());
    e.addElement("desc").setText(pm.getDesc());
    boolean b=DomFactory.save();
    if(b){
      return true;
    }
    return false;
  }
  public List getAllPhotos(){
    List li=new ArrayList();

    Document dom=DomFactory.getDom();
    Element e=dom.getRootElement();
    Iterator it=e.elementIterator();
    while(it.hasNext()){
      Element ie=it.next();
      PhotoModel pm=new PhotoModel();
      pm.setId(ie.attributeValue("id"));
      pm.setDir(ie.attributeValue("dir"));
      pm.setDt(ie.attributeValue("dt"));
      pm.setExt(ie.attributeValue("ext"));
      pm.setIp(ie.attributeValue("ip"));
      pm.setRealName(ie.attributeValue("realName"));

      pm.setDesc(ie.elementText("desc"));
      li.add(pm);
    }
    return li;


  }
  public PhotoModel getSingleById(String id){
    List li=getAllPhotos();
    PhotoModel pm=new PhotoModel();
    for(PhotoModel p:li){
      if(p.getId().equals(id)){
        return p;
      }
    }
    return null;


  }
  public boolean del(String id) {
    Document dom=DomFactory.getDom();
    Element e=(Element) dom.selectSingleNode("//photo[@id='"+id+"']");
    return e.getParent().remove(e);
  }
}

工具类:

1.

package cn.hncu.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class MyUtils {

  private MyUtils() {
  }
  public static String getUUID(){
    return UUID.randomUUID().toString().replace("-", "");
  }
  private static SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
  public static String getCurrentDataime(){
    return sdf.format(new Date());
  }
  public static String getDir(String uuid){
    String dir1=Integer.toHexString(uuid.hashCode()&0xf);
    String dir2=Integer.toHexString((uuid.hashCode()&0xf0)>>4);

    return dir1+"/"+dir2;
  }
}

2.

package cn.hncu.utils;

import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class DomFactory {
  private static Document dom;
  private static String fileName;
  static{
    try {
      SAXReader r=new SAXReader();
      //获取src下的资源文件
      fileName=DomFactory.class.getClassLoader().getResource("photos.xml").getPath();
      System.out.println("users.xml的路径:"+fileName);//"/D:/apache-tomcat-7.0.30/webapps/photosWeb/WEB-INF/classes/photos.xml"
      //注意:获取tomcat中当前项目classpath下的资源方式
      dom=r.read(fileName);
    } catch (DocumentException e) {
      e.printStackTrace();
    }
  }
  public static Document getDom(){
    return dom;
  }
  public static boolean save(){
    XMLWriter w;
    try {
      w = new XMLWriter(new FileOutputStream(fileName));
      w.write(dom);
      w.close();
      return true;
    } catch (Exception e) {
      return false;
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
纤妍内衣天旺店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有