一、視頻上傳到服務器,存到指定位置。
試過n個方法中,最最靠譜的一個:
http://www.cnblogs.com/xdp-gacl/p/4200090.html
二、url保存到數據庫
1、項目中新建一個jdbc包
新建類
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class JdbcUtil { private static String driver; private static String url; private static String user; private static String password; private static Properties pr=new Properties(); public JdbcUtil(){} static { try { pr.load(JdbcUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties")); driver=pr.getProperty("driver"); url=pr.getProperty("dburl"); user=pr.getProperty("user"); password=pr.getProperty("password"); Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url,user,password); } public static void free(ResultSet rs,PreparedStatement st,Connection conn){ try { if(rs!=null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ try { if(st!=null) st.close(); } catch (SQLException e2) { e2.printStackTrace(); } finally{ try { if(conn!=null) conn.close(); } catch (SQLException e3) { e3.printStackTrace(); } } } } public boolean Write(String s) throws SQLException{ int n=0; Connection conn=getConnection(); PreparedStatement ps=null; try { ps=conn.prepareStatement(s); n=ps.executeUpdate(); if(n!=0) return true; } catch (Exception e) { e.printStackTrace(); } finally{ free(null, ps, conn); } return false; } }
2、src下新建一個
dbconfig.properties
driver=com.mysql.jdbc.Driver dburl=jdbc\:mysql\://localhost\:3306/app?useUnicode=true&characterEncoding=UTF-8 user=root password=123456
3、新建一個包bean(實體類) 你要存入的可能不只是一個url吧,和一般的實體類一樣,getter setter 有參無參的構造函數。
略
4、新建一個dao包
新建類
package dao; import java.sql.SQLException; import bean.Resourse; public interface ResourseDao { public boolean insert(Resourse r)throws SQLException; }
5、daoImpl包
新建類
package daoImpl; import java.sql.SQLException; import bean.Resourse; import dao.ResourseDao; import jdbc.JdbcUtil; public class ResourseDaoImpl implements ResourseDao { private JdbcUtil ju; public ResourseDaoImpl() { ju=new JdbcUtil(); } @Override public boolean insert(Resourse r) throws SQLException { String sql="insert into resourse values(0,'"+r.getWord()+"','"+r.getResourse_path()+"',"+r.getIsused()+","+r.getQid()+",'"
+r.getUphone()+"')"; return ju.Write(sql); } }
6、在步驟一 大神寫的servlet里加幾句
package servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import bean.Resourse; import dao.ResourseDao; import daoImpl.ResourseDaoImpl; @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String value=""; ResourseDao rd=new ResourseDaoImpl();// new! response.setCharacterEncoding("utf-8"); //得到上傳文件的保存目錄,將上傳的文件存放於WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的安全 String savePath = this.getServletContext().getRealPath("/teach/video"); File file = new File(savePath); //判斷上傳文件的保存目錄是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(savePath+"目錄不存在,需要創建"); //創建目錄 file.mkdir(); } //消息提示 String message = ""; try{ //使用Apache文件上傳組件處理文件上傳步驟: //1、創建一個DiskFileItemFactory工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、創建一個文件上傳解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解決上傳文件名的中文亂碼 upload.setHeaderEncoding("UTF-8"); //3、判斷提交上來的數據是否是上傳表單的數據 if(!ServletFileUpload.isMultipartContent(request)){ //按照傳統方式獲取數據 return; } //4、使用ServletFileUpload解析器解析上傳數據,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項 List<FileItem> list = upload.parseRequest(request); for(FileItem item : list){ //如果fileitem中封裝的是普通輸入項的數據 if(item.isFormField()){ String name = item.getFieldName(); //解決普通輸入項的數據的中文亂碼問題 value = item.getString("UTF-8"); //value = new String(value.getBytes("iso8859-1"),"UTF-8"); System.out.println(name + "=" + value); }else{//如果fileitem中封裝的是上傳文件 //得到上傳的文件名稱, String filenamee=item.getName(); String filename = "http://localhost:8080/soga/teach/video/"+item.getName();//new! //添加到數據庫!!! filename=checkString(filename);//new! System.out.println(filename);//new! Resourse r=new Resourse(value,filename,0,"188*******");//這里是你自己寫的實體類里的構造函數 System.out.println(rd.insert(r));//new! if(filenamee==null || filenamee.trim().equals("")){ continue; } //注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如: c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt //處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分 filenamee = filenamee.substring(filenamee.lastIndexOf("\\")+1); //獲取item中的上傳文件的輸入流 InputStream in = item.getInputStream(); //創建一個文件輸出流 FileOutputStream out = new FileOutputStream(savePath + "\\" + filenamee); //創建一個緩沖區 byte buffer[] = new byte[1024]; //判斷輸入流中的數據是否已經讀完的標識 int len = 0; //循環將輸入流讀入到緩沖區當中,(len=in.read(buffer))>0就表示in里面還有數據 while((len=in.read(buffer))>0){ //使用FileOutputStream輸出流將緩沖區的數據寫入到指定的目錄(savePath + "\\" + filename)當中 out.write(buffer, 0, len); } //關閉輸入流 in.close(); //關閉輸出流 out.close(); //刪除處理文件上傳時生成的臨時文件 item.delete(); message = "文件上傳成功!"; } } }catch (Exception e) { message= "文件上傳失敗!"; e.printStackTrace(); } request.setAttribute("message",message); request.getRequestDispatcher("/message.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public String checkString(String str){ //new! String returnStr = ""; if(str.indexOf("'") != -1){//判斷字符串是否含有單引號 returnStr = str.replace("'", "''"); str = returnStr; } return str; } }
紅色的是我新添加的。??怎么沒有,不過我在新加的代碼后注釋了://new!
三、從數據庫讀出url,內容顯示在網頁上。
這里就和json有關了。完整步驟見:jsonp跨域訪問servlet接口獲取json數組,並且渲染數據,前后端完整