java 怎么向html写入 HTML类型的String。

哪个做过的给点提示,或者是DM,谢谢!java 怎么向html写入 HTML类型的String。
java 怎么向html写入 HTML类型的String。

4个回答

以.txt形式打开html,写入文字,保存

JSP里面可以直接插入java写

首先,jsp页面可以用指令<%=%>来插入java指定中定义的变量的值的。
其次,如果你想动态修改html页面某些元素的html的内容,就用js动态修改啊,jQuery操作dom对象,动态添加修改页面元素的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java向mysql写入数据时,double类型行报错
**做了一个插入学生信息的页面,用户填写完相应内容后,调用studentDaoImpl中的addStu方法向数据库写入对应数据** ## addStu方法 ``` public int addStu(student stu) { // TODO Auto-generated method stub sql = "insert into student values(?,?,?,?,?,?)";//int string string int string double try { PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, stu.getId()); ps.setString(2, stu.getName()); ps.setDouble(3, stu.getScore()); ps.setString(4, stu.getSex()); ps.setInt(5, stu.getAge()); ps.setString(6, stu.getClassname()); num = ps.executeUpdate(); ps.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return num; } ``` ## **Servlet中取页面输入的数据(数据格式已经用js控制了) ``` public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); int id = Integer.parseInt(request.getParameter("id")); String name = request.getParameter("name"); double score = Double.parseDouble(request.getParameter("score")); String sex = request.getParameter("sex"); int age = Integer.parseInt(request.getParameter("age")); String classname = request.getParameter("classname"); /*添加进数据库前先判断此学生存在了没有 * :存在,返回页面并提示已存在 * :不存在,添加 * */ studentDaoImpl sdi = new studentDaoImpl(); if(sdi.findStuById(id)!=null){ //存在 request.setAttribute("exist", "<font color='red'>此学生已存在</font><br/>"); request.getRequestDispatcher("addStu.jsp").forward(request, response); } else{ //不存在 student stu = new student(); stu.setId(id); stu.setName(name); stu.setScore(score); stu.setSex(sex); stu.setAge(age); stu.setClassname(classname); sdi.addStu(stu); request.setAttribute("exist", "添加成功"); request.getRequestDispatcher("addStu.jsp").forward(request, response); } } ``` ## 这是js代码,用正则表达式控制input的各个数据格式 ``` // JavaScript Document function check(){ var id = document.getElementsByName('id')[0].value.replace(/(^\s*)|(\s*$)/g, ""); var score = document.getElementsByName('score')[0].value.replace(/(^\s*)|(\s*$)/g, ""); var age = document.getElementsByName('age')[0].value.replace(/(^\s*)|(\s*$)/g, ""); var classname = document.getElementsByName('classname')[0].value.replace(/(^\s*)|(\s*$)/g, ""); var errors = document.getElementsByName('error'); var flag = true; /*每次点击时都先清空错误提示消息*/ for(var i=0; i<errors.length; i++){ errors[i].innerHTML = ""; } if(/^[1-9]\d{0,1}/.test(id)==false){ errors[0].innerHTML = "学号输入有误,应为非0开头的1-2位数字"; flag = false; } if(/^\d+(\.\d+)?$/.test(score)==false){ errors[1].innerHTML = "分数格式有误,应为非负小数或整数"; flag = false; } if(/^[1-9]\d{0,2}$/.test(age)==false){ errors[2].innerHTML = "年龄格式有误,应为1-3位不为0开头的数字"; flag = false; } if(/^[1-9]{2}[\u4e00-\u9fa5]{2,3}[1-9]{1}[\u73ed]{1}$/.test(classname)==false){ errors[3].innerHTML = "班级名称格式有误,应为'2位数字+2字专业+1位数字+班'"; flag = false; } return flag; } ``` 在执行时报错Data truncated for column 'score' at row 1,网上搜大多是说格式没有对应上,可能java里的score是个字符串而数据库里的是double,我也特意检查了一下表格式,发现无误,这是创建表的语句 ``` mysql> create table student( -> id int(10) not null auto_increment, -> name varchar(20) not null, -> score double(5,2) not null, -> sex varchar(2) not null, -> age int(3) not null, -> classname varchar(20) not null, -> primary key(id) -> )ENGINE=InnoDB, DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.01 sec) ``` 不太会排版,有点凌乱了,实在抱歉
java 通过浏览器访问本地服务器打开一个html文件总是找不到路径
文件路径正确,并且绝对路径和相对路径都已经尝试,为啥一直报相同错误。 ``` package day29; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class BS { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(8888); while (true){ Socket ac = ss.accept(); new Thread(new Runnable() { @Override public void run() { try { InputStream is = ac.getInputStream(); BufferedReader bf = new BufferedReader(new InputStreamReader(is)); String s = bf.readLine(); System.out.println(s); String[] s1 = s.split(" "); String sub = s1[1].substring(1); System.out.println(sub); FileInputStream fis = new FileInputStream(sub); OutputStream os = ac.getOutputStream(); // 写入HTTP协议响应头,固定写法 os.write("HTTP/1.1 200 OK\r\n".getBytes()); os.write("Content-Type:text/html\r\n".getBytes()); // 必须要写入空行,否则浏览器不解析 os.write("\r\n".getBytes()); int len = 0; byte[] b = new byte[1024]; while ((len = fis.read(b)) != -1){ os.write(b); fis.close(); ac.close(); } }catch (IOException E){ E.printStackTrace(); } } }).start(); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/202001/16/1579188286_656266.jpg)
求帮助!在JAVA代码中建立JSP出现中文乱码问题
**求解决!在JAVA代码中建立JSP出现中文乱码问题,新建JSP文件里面,中文是乱码的。** ``` public void CreatHtml(String filePath){ //创建、初始化stringHtml对象 StringBuilder stringHtml = new StringBuilder(); //初始化文件对象 PrintStream printStream =null; try{ //打开文件 printStream = new PrintStream(new FileOutputStream(filePath)); }catch(FileNotFoundException e){ e.printStackTrace(); } //追加输入HTML文件内容 stringHtml.append("<html><head>"); stringHtml.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8 ; pageEncoding=UTF-8\">");\">"); stringHtml.append("<title>测试报告文档</title>"); stringHtml.append("</head>"); stringHtml.append("<body>"); stringHtml.append("<h1>简单快速用Java动态生成jsp/html页面</h1>"); stringHtml.append("</body></html>"); try{ //将HTML文件内容写入文件中 printStream.println(stringHtml.toString()); }catch (Exception e) { e.printStackTrace(); } } public String execute(){ String imgname =UUID.randomUUID().toString()+".jsp"; System.out.println(imgname); //文件储存路径 String filePath = "d:\\MyEclipseWork\\gxAppWebServer\\WebRoot\\"+imgname; //创建文件 CreatHtml(filePath); return SUCCESS; } ```
mysql数据可以读取,但是不能写入
myeclipse下的web应用 有一个登录注册功能,登陆的时候读取数据库可以, 但是注册要写入进去就不行 ``` register.jsp <%@ page language="java" import="java.util.*,java.sql.*,cn.edu.dhu.*"%> <%@ page contentType="text/html,charset=utf-8" pageEncoding="utf-8"%> <% 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%>"> <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"> --> </head> <% String name = request.getParameter("usernamesignup"); String account = request.getParameter("emailsignup"); String pswd1 = request.getParameter("passwordsignup"); String pswd2 = request.getParameter("passwordsignup_confirm"); System.out.println("name="+name); System.out.println("name="+account); System.out.println("name="+pswd1); System.out.println("name="+pswd2); if(account !=null && pswd2!=null){ System.out.println("执行到了"); String sql = "use jsgl;insert into jsgl.user values('"+name+"','"+account+"','"+pswd1+"','"+pswd2+"')"; System.out.println("执行到了"); Connection conn=DB.getConn(); System.out.println("执行到了"); Statement stmt = DB.createStmt(conn); System.out.println("执行到了"); int n = DB.executeUpdate(stmt, sql); response.sendRedirect("index.jsp"); System.out.println("执行到了"); } %> <body> </body> </html> ``` ![图片说明](https://img-ask.csdn.net/upload/201604/07/1460005966_505761.png) 都执行到了,但是数据库里面没有信息 ps:从命令行敲insert语句是可以插入的 myeclipse这里不行的 求帮忙
java读取xml,将读到的数据存放到对象中,再按照一定条件写入xml,从而生成动态菜单
做eclipse插件开发,菜单项的配置是在plugin.xml中是写死的,现在想做成动态菜单的形式。中间写一个类,这个类可以读取一个xml配置文件,然后可以有一些方法把提取过的数据和plugin.xml联系起来,通过这个类来动态的配置eclipse的菜单。我的想法是把读到的xml文件的内容封装到java的对象中,返回值是一个集合类型,然后我就不知道怎么做了。 图片是展示效果: ![图片说明](https://img-ask.csdn.net/upload/201609/01/1472719954_312637.png) ``` 下面是我们找的一些相关资源: [](http://dom4j.sourceforge.net/dom4j-1.6.1/guide.html "") 这是我自己写的demo: package testforxybc; public class UserInfo { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String password; } package testforxybc; import java.beans.XMLDecoder; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class UserInfoController { public static void main(String args[]) { List<UserInfo> objList = null; try { objList = UserInfoController.objectXMLDecoder("outxml.xml"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } for (UserInfo userInfo : objList) { System.out.println(userInfo.getName()); System.out.println(userInfo.getPassword()); } } public static List<UserInfo> objectXMLDecoder(String objSource) throws FileNotFoundException,IOException,Exception { List<UserInfo> objList = new ArrayList<UserInfo>(); File fin = new File(objSource); FileInputStream fis = new FileInputStream(fin); XMLDecoder decoder = new XMLDecoder(fis); Object obj = null; try { while( (obj = decoder.readObject()) != null) { objList.add((UserInfo) obj); } } catch (Exception e) { // TODO Auto-generated catch block } fis.close(); decoder.close(); return objList; } } <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.eclipse.ui.commands"> <category name="Inoherb Category" id="com.uds.inoherb.commands.category"> </category> <command name="法规标准库" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.regulatoryStandards"> </command> <command name="产品标准" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.productStandard"> </command> <command name="禁限用清单" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.prohibitedList"> </command> <command name="全成分" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.fullComposition"> </command> <command name="原料库" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.rawMaterial"> </command> <command name="油脂类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.fadAndOil"> </command> <command name="乳化剂类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.emulsifier"> </command> <command name="香精类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.parfum"> </command> <command name="活性物类" categoryId="com.uds.inoherb.commands.category" id="com.uds.inoherb.commands.actives"> </command> </extension> <extension point="org.eclipse.ui.handlers"> <handler commandId="com.uds.inoherb.commands.regulatoryStandards" class="com.uds.inoherb.handlers.SampleHandler"> </handler> <handler commandId="com.uds.inoherb.commands.rawMaterial" class="com.uds.inoherb.handlers.SampleHandler"> </handler> <handler commandId="com.uds.inoherb.commands.productStandard" class="com.uds.inoherb.handlers.SampleHandler"> </handler> <handler commandId="com.uds.inoherb.commands.fadAndOil" class="com.uds.inoherb.handlers.SampleHandler"> </handler> </extension> <extension point="org.eclipse.ui.bindings"> <key commandId="com.uds.inoherb.commands.sampleCommand" contextId="org.eclipse.ui.contexts.window" sequence="M1+6" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"> </key> </extension> <extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"> <menu label="企业电子数据库" id="com.uds.inoherb.menus.sampleMenu"> <menu label="法规标准库" id="com.uds.inoherb.menus.sampleMenu2"> <command commandId="com.uds.inoherb.commands.productStandard" id="com.uds.inoherb.menus.productStandard"> </command> <command commandId="com.uds.inoherb.commands.prohibitedList" id="com.uds.inoherb.menus.prohibitedList"> </command> <command commandId="com.uds.inoherb.commands.fullComposition" id="com.uds.inoherb.menus.fullComposition"> </command> </menu> <menu label="原料库" id="com.uds.inoherb.menus.sampleMenu3"> <command commandId="com.uds.inoherb.commands.fadAndOil" id="com.uds.inoherb.menus.fadAndOil"> </command> <command commandId="com.uds.inoherb.commands.emulsifier" id="com.uds.inoherb.menus.emulsifier"> </command> <command commandId="com.uds.inoherb.commands.parfum" id="com.uds.inoherb.menus.parfum"> </command> <command commandId="com.uds.inoherb.commands.actives" id="com.uds.inoherb.menus.actives"> </command> </menu> </menu> </menuContribution> </extension> </plugin> ```
当输出0000000000000后停止运行要如何处理?
如下代码: String url = "http://www.xxx.com/xxx/downloadFile/" + filename + "." + format; loadQianURL("Desktop",url); /** * 文件或文件夹不存在则创建 * @param dir 文件夹 * @param filepath 文件名 */ public static void createDirFile(String dir){ File file = new File(dir); if(!file.exists()){ file.mkdirs(); } } /** * @param dir 子目录 * @param fileUrl 图片链接 * @return */ public static String loadQianURL(String dir,String fileUrl) { //获取文件名,文件名实际上在URL中可以找到 String fileName = fileUrl.substring(fileUrl.lastIndexOf("/")+1,fileUrl.length()); //这里服务器上要将此图保存的路径 String savePath = "D:/upload/"; if (!StringUtils.isEmpty(dir)){ savePath = savePath +dir+"/"; } createDirFile(savePath); try { /*将网络资源地址传给,即赋值给url*/ URL url = new URL(fileUrl); /*此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流*/ HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //服务器的安全设置不接受Java程序作为客户端访问,解决方案是设置客户端的User Agent connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); System.out.println("0000000000000000000000000000"); DataInputStream in = new DataInputStream(connection.getInputStream()); System.out.println("111111111111111111111111111111"); /*此处也可用BufferedInputStream与BufferedOutputStream*/ DataOutputStream out = new DataOutputStream(new FileOutputStream(savePath+fileName)); /*将参数savePath,即将截取的图片的存储在本地地址赋值给out输出流所指定的地址*/ byte[] buffer = new byte[4096]; int count = 0; /*将输入流以字节的形式读取并写入buffer中*/ while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); } out.close();/*后面三行为关闭输入输出流以及网络资源的固定格式*/ in.close(); connection.disconnect(); //返回内容是保存后的完整的URL /*网络资源截取并存储本地成功返回true*/ return savePath+fileName; } catch (Exception e) { System.out.println(e + fileUrl + savePath); return null; } } 运行结果:2019-10-22 16:43:55.545 2f1aa58b I: 0000000000000000000000000000 java.io.FileNotFoundException: http://www.xxx.com/xxx/downloadFile/1二维码.png 输出0000000000000后停止运行要如何处理?
java.io.FileNotFoundException问题
package com.luceneheritrixbook.extractor.pconline.mobile; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Date; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.NotFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.ImageTag; import org.htmlparser.tags.TableColumn; import org.htmlparser.util.NodeList; import com.luceneheritrixbook.extractor.Extractor; import com.luceneheritrixbook.extractor.com163.Extract163Moblie; import com.luceneheritrixbook.util.StringUtils; public class ExtractPconlineMoblie extends Extractor { public void extract() { BufferedWriter bw = null; //创建属性过滤器 NodeFilter attributes_filter = new AndFilter(new TagNameFilter("td"), new OrFilter(new HasAttributeFilter("class", "td1"),new HasAttributeFilter("class", "td2")) ); //创建标题过滤器 NodeFilter title_filter = new TagNameFilter("h1"); /* NodeFilter title_filter = new AndFilter(new TagNameFilter("h1"), new AndFilter(new HasAttributeFilter("class", "praameters"), new NotFilter(new HasAttributeFilter("width")))); */ //创建图片过滤器 NodeFilter image_filter = new AndFilter( new TagNameFilter("img"), // new HasAttributeFilter("class", "product-img")); new HasAttributeFilter("class", "bigimg")); //提取标题信息 try { //Parser根据过滤器返回所有满足过滤条件的节点 NodeList title_nodes = this.getParser().parse(title_filter); //遍历所有节点 long num = title_nodes.size(); for (int i = 0; i < title_nodes.size(); i++) { Node node_title=title_nodes.elementAt(i); //提取标题信息 //TableColumn node = (TableColumn) title_nodes.elementAt(i); //用空格分割节点内部html文本 String[] names = node_title.toPlainTextString().split(" "); StringBuffer title = new StringBuffer(); //创建要生成的文本文件名 for (int k = 0; k < names.length; k++) { title.append(names[k]).append("-"); } title.append((new Date()).getTime()); //创建要生成的文件 String path = this.getOutputPath(); bw = new BufferedWriter(new FileWriter(new File(path+title+".txt"))); //获取当前提取页的完整URL地址 int startPos = getInuputFilePath().indexOf("mirror") + 6; String url_seg = getInuputFilePath().substring(startPos); url_seg = url_seg.replaceAll("\\\\", "/"); String url = "http:/" + url_seg; System.out.println(url); //写入当前提取页的完整URL地址 bw.write(url + NEWLINE); for (int k = 0; k < names.length; k++) { bw.write(names[k] + NEWLINE); } } } catch (Exception e) { e.printStackTrace(); } //重置Parser this.getParser().reset(); try { //Parser根据过滤器返回所有满足过滤条件的节点 NodeList attributes_nodes = this.getParser().parse(attributes_filter); for (int i = 0; i < attributes_nodes.size(); i++) { //Parser根据过滤器返回所有满足过滤条件的节点 TableColumn node = (TableColumn) attributes_nodes.elementAt(i); String name = node.getAttribute("class"); //提取属性名信息 String result = node.toPlainTextString(); if( name.equals( new String("td1") )) { bw.write(StringUtils.trim(result) + ":"); } else if( name.equals( new String("td2") )) { bw.write(StringUtils.trim(result) ); bw.newLine(); } // System.out.println(result); //提取属性值信息 // TableColumn nodeExt = (TableColumn) node.getNextSibling(); /* //提取属性名信息 String result = getProp( "<TD CLASS=btd WIDTH=198 BGCOLOR=\"#FCFCFC\"><B>(.*)</B></TD>", node.toHtml(), 1); //属性里面包含有link标签的情况 if (result.indexOf("<") != -1) result = getProp( "<TD CLASS=btd WIDTH=198 BGCOLOR=\"#FCFCFC\"(.*)>(.*)</a></B></TD>", node.toHtml(), 2); //提取属性值信息 TableColumn nodeExt = (TableColumn) node.getNextSibling() .getNextSibling(); */ continue; } } catch (Exception e) { e.printStackTrace(); } // 重置Parser this.getParser().reset(); try { // Parser根据过滤器返回所有满足过滤条件的节点 NodeList image_nodes = this.getParser().parse(image_filter); for (int i = 0; i < image_nodes.size(); i++) { ImageTag node = (ImageTag) image_nodes.elementAt(i); //获取当前节点的SRC属性值 String image_url = node.getAttribute("src"); //提取文件类型 String fileType = image_url.substring(image_url .lastIndexOf(".") + 1); //生成新的图片的文件名 String new_iamge_file = StringUtils.encodePassword( image_url, HASH_ALGORITHM) + "." + fileType; image_url = StringUtils.replace(image_url, "+", " "); //利用mirror目录下的图片生成的新的图片 copyImage(image_url, new_iamge_file); bw.write(image_url + NEWLINE); bw.write(SEPARATOR + NEWLINE); bw.write(new_iamge_file + NEWLINE); System.out.println(image_url); } } catch (Exception e) { e.printStackTrace(); } try{ if (bw != null) bw.close(); }catch(IOException e){ e.printStackTrace(); } } } ----------------------------------------------------------------- 运行结果: ![图片说明](https://img-ask.csdn.net/upload/201611/17/1479316399_534061.png) 文件名中为什么会有回车符。。。。
我前端页面上传了视频到 项目的tomcat服务器上 ,数据库保存的地址,但是我在前期怎么访问这个视频啊。求大神指点
后台上传代码 ``` public int addCourseWare(HttpServletRequest request){ //解析请求中的数据 MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest) request; String courseWare_name = request.getParameter("courseWare_name"); String course_id =request.getParameter("course_name"); String courseWare_type = request.getParameter("courseWare_type"); String courseWare_introduction = request.getParameter("courseWare_introduction"); //将上传的数据写入CourseWareCnd对象 CourseWareCnd cnd = new CourseWareCnd(); cnd.setCourseWare_name(courseWare_name); cnd.setCourse_id(Integer.parseInt(course_id)); cnd.setCourseWare_type(courseWare_type); cnd.setCourseWare_introduction(courseWare_introduction); //获取上传文件的文件名 MultipartFile file = mpRequest.getFile("video"); String name = file.getOriginalFilename(); //获取项目路径 String ctxPath = request.getSession().getServletContext().getRealPath("/"); String path=ctxPath+name; cnd.setVideo(path); System.out.println("-------------"+path); File f = new File(ctxPath); if (!f.exists()) {//判断文件夹是否存在,不存在创建 f.mkdir(); } try { file.transferTo(new File(path));//将数据写到该位置 } catch (IOException e) { e.printStackTrace(); } int result = courseWareMapper.addCourseWare(cnd); return result; } ``` 前端HTML页面 ``` <div class="ibox float-e-margins"> <div class="ibox-title"> <h5>视频播放</h5> <div class="ibox-tools"> <a class="collapse-link"> <i class="fa fa-chevron-up"></i> </a> <a class="dropdown-toggle" data-toggle="dropdown" href="form_basic.html#"> <i class="fa fa-wrench"></i> </a> <a class="close-link"> <i class="fa fa-times"></i> </a> </div> </div> <div class="ibox-content"> <div class="player"> <video src=""> <!-- Video files --> Your browser does not support the video tag. <source src="http://localhost:8080" type="video/mp4"> <a href="">Download</a> </video> </div> </div> </div> ``` 我该怎么去获取这个视频啊,,,,,,, 第一次写这个视频的上传与播放 求大佬指点。。。。。。。。
使用java通过URL下载图片不正常
http://zcimg.zcool.com.cn/zcimg/m_c6fe5449f86a0000016004e746c6.jpg 第一条地址可以正确下到图片 http://www.zcool.com.cn/img.html#src=/zcimg/905054488bb700000160049caba7.jpg 第二条地址下载下来的图片只有1KB且打不开 怀疑是不是#src的问题 下载代码 public static void downloadImage(URL url,String filePath){ try{ setParams(url,filePath); System.out.println("Downloading image from " + url); File outFile = new File(filePath + (count+1) + ".png"); OutputStream os = new FileOutputStream(outFile); InputStream is = url.openStream(); byte[] buff = new byte[1024];//一次读取的数据为1024Byte while(true) { int readedLength = is.read(buff);//一次读取1024Byte写入buff if(readedLength == -1) { break; } byte[] temp = new byte[readedLength]; System.arraycopy(buff, 0, temp, 0, readedLength); os.write(temp); } is.close(); os.close(); System.out.println("Download Finish " + (count + 1)); count++; } catch(Exception e){ e.printStackTrace(); } } 谢谢。。。
java web 多线程下载文件的问题。
**当我开启多线程下载文件时,outputstream.write 报 空指针 错误。 大佬们帮我看看 ** ``` ExecutorService executorService = Executors.newCachedThreadPool(); executorService.execute( new Runnable() { @Override public void run() { String path=System.getProperty("catalina.home")+"/webapps/uploadFiles/njhb/areaFiles/南京市/"+fileName; final File file = new File(path); if(!file.exists()){ System.out.println("文件不存在"); //response.setHeader("content-type", "text/html;charset=UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = null; try { writer = response.getWriter(); } catch (IOException e) { e.printStackTrace(); } writer.write("文件不存在!"); return; } response.reset(); response.setCharacterEncoding("UTF-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName="+ encodingFileName(fileName)); response.setHeader("Set-Cookie", "fileDownload=true; path=/;" + "attachment;fileName=" + encodingFileName(fileName)); try { //打开本地文件流 InputStream inputStream = new FileInputStream(file); //激活下载操作 OutputStream outputStream = response.getOutputStream(); //循环写入输出流 每次读取2048 一直读完 byte[] b = new byte[2048]; int length; int count=0; while ((length = inputStream.read(b)) > 0) { System.out.println("b: "+b+" length: "+length); outputStream.write(b, 0, length); count++; } // 这里主要关闭。 outputStream.close(); inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); logg.info("文件下载终止!!!"); } } } ); ``` 下面是报错信息!! ![图片说明](https://img-ask.csdn.net/upload/201905/30/1559211144_987376.jpg)
java web 图片上传控制台不报错但文件传不出去
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 String savePath = this.getServletContext().getRealPath("/WEB-INF/upload"); 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(); //解决普通输入项的数据的中文乱码问题 String value = item.getString("UTF-8"); //value = new String(value.getBytes("iso8859-1"),"UTF-8"); System.out.println(name + "=" + value); }else{//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filename = item.getName(); System.out.println(filename); if(filename==null || filename.trim().equals("")){ continue; } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename.substring(filename.lastIndexOf("\\")+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "\\" + filename); //创建一个缓冲区 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); } } <form action="${pageContext.request.contextPath}../UploadHandleServlet" enctype="multipart/form-data" method="post"> <input type="submit" value="提交"> </form> </body> </html> <body> ${message} </body> </html> > 控制台不报错 提示2http://lenovo-pc:8080/Two../UploadHandleServlet Failed to load resource: the server responded with a status of 404 (Not Found) ``` ``` ``` ``` ``` ```
为什么抓取不到还报空指针,希望各路大神能帮忙解决下
package com; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * * 网页数据抓取工具类 * */ public class Damo { /** * 获取网页源代码 * @throws IOException * @throws IOException * */ public static String getHtmlResouceByUrl(String url,String encoding) { URL urlObj=null; URLConnection uc=null; InputStreamReader isr=null; BufferedReader reader=null; StringBuffer buffer=null; try { //建立网络连接 urlObj=new URL(url); //打开网络连接 try { uc=urlObj.openConnection(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //建立文件输入流 try { isr=new InputStreamReader(uc.getInputStream(),encoding); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //建立缓存写入 reader = new BufferedReader(isr); //临时 String temp=null; try { while ((temp=reader.readLine())!=null) { // buffer.append(temp+"\n"); System.out.println(temp+"\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(isr!=null){ //关闭流 try { isr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return buffer.toString(); } /* * 爬取互动值 */ public static List<HashMap<String, String>> getInFo(String url,String encoding){ //拿到源代码 String html = getHtmlResouceByUrl(url, encoding); //解析代码文件 Document document = Jsoup.parse(html); //获取代码的具体内容 Element element = document.getElementById("1"); //获取结果 Elements elements = document.getElementsByClass("f_card_lricon"); List<HashMap<String, String>> maps =new ArrayList<HashMap<String,String>>(); HashMap<String, String> map =null; for (Element el : elements) { map = new HashMap<String, String>(); //获取评论数 String comment=el.getElementsByClass("comment").text(); //获取标题 String comment1=el.getElementsByClass("f_card_h4").text(); map.put(comment, "f_card_lricon"); map.put(comment1,"f_card_h4"); maps.add(map); } return maps; } public static void main(String[] args) { // String webString=getHtmlResouceByUrl("http://news.baidu.com/","utf-8"); // String webString=getHtmlResouceByUrl("http://www.163.com/","gbk"); // System.out.println(webString); String urlString = "http://k.sina.cn/article_1707602817_65c7f381001002v4u.html?kfrome=auto&local=&subch=3&vt=4"; List<HashMap<String, String>> list =getInFo(urlString, "utf-8"); System.out.println(list); } } ![图片说明](https://img-ask.csdn.net/upload/201705/02/1493710691_335928.png)
jsp页面往后台存储时间类型数据时发生错误Unknown Source
主要问题是前台使用mobiscroll控件写入input控件后 使用form submit提交数据 后台servlet使用getParameter获取input控件值 转换格式后传输到数据库中。数据库字段为mysql的date类型 但是现在报错显示at java.text.SimpleDateFormat.parse(Unknown Source) at java.text.DateFormat.parse(Unknown Source 附上代码 servlet: ``` @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); System.out.println("进来了submit!!!!"); work worksubmit=new work(); HttpSession session = request.getSession(); worksubmit.sete_name("sjn"); //(String)session.getAttribute("username"); SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM-dd");// 定义格式 String choosedate=dd.format(request.getParameter("txttest")); System.out.println(choosedate); Date chooseDate = null; try { chooseDate = dd.parse(choosedate); } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } java.sql.Date sqlchooseDate = new java.sql.Date(chooseDate.getTime()); worksubmit.setw_date(sqlchooseDate);//change 日期格式 String testname=(String)request.getParameter("testname"); worksubmit.setw_title(testname); ///time 获得方式待写 int score =0; String content=(String)request.getParameter("feel");//心得内容 if(content != null) { score+=2; } worksubmit.setw_content(content); int achieve11=0; int achieve21=0; int achieve31=0; int achieve41=0; String achieve1=(String)request.getParameter("Fruit1"); String achieve2=(String)request.getParameter("Fruit2"); String achieve3=(String)request.getParameter("Fruit3"); String achieve4=(String)request.getParameter("Fruit4"); if (achieve1!= null) { score=score+2; achieve11=1; } if (achieve2!= null) { score=score+2; achieve21=1; } if (achieve3!= null) { score=score+2; achieve31=1; } if (achieve4!= null) { score=score+2; achieve41=1; } worksubmit.setachieve1(achieve11); worksubmit.setachieve2(achieve21); worksubmit.setachieve3(achieve31); worksubmit.setachieve4(achieve41); worksubmit.setw_score(score); DAOProxy DAOProxy=new DAOProxy(); try { if(DAOProxy.submit(worksubmit)){ request.getRequestDispatcher("worklist.jsp").forward(request,response);; return ; }else { return ; } } catch (Exception e) { e.printStackTrace(); } } ``` 前台jsp页面: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> <title>日期选择</title> <!-- 引入JQ Mobile所需C2S --> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" /> <!-- 引入JQ 脚本文件提高对 JQmobile支持 --> <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <!-- 引入JQ Mobile所需脚本文件 --> <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> <!-- 引入mobiscroll插件 --> <script src="js/zepto.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.zepto.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.core.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.datetime.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.select.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.ios.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.android.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.android-ics.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.wp.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.i18n.zh.js" type="text/javascript"></script> <link href="plugs/mobiscroll/css/mobiscroll.scroller.css" rel="stylesheet" type="text/css" /> <link href="plugs/mobiscroll/css/mobiscroll.scroller.sense-ui.css" rel="stylesheet" type="text/css" /> <!-- 配置mobiscroll插件 --> <script type="text/javascript"> $(function () { var curr = new Date().getFullYear(); var fun = function () { $('#txttest').scroller('destroy').scroller({ preset: 'date', minDate: new Date(2012, 3, 10), maxDate: new Date(2020, 12, 15), invalid: { daysOfWeek: [0, 6], daysOfMonth: ['5/1', '12/24', '12/25'] }, theme: $('#theme').val(), lang: 'zh' }); } $('.settings select').bind('change', function () { fun(); }); fun(); }); </script> </head> <body> <div data-role="page" data-theme="a"> <div data-role="header" data-position="fixed"> <h1>写作业</h1> <a href="http://localhost:8080/zhisland/plugs/mobiscroll/index.html" data-role="button" class="ui-btn-left">返回</a> </div> <form action="submitServlet" method="post"> <div id="choose" name="choose" data-role="content"> <label for="test" >选择日期:</label> </div> <div id="inputchoose"> <input name="txttest" id="txttest" placeholder="请选择日期" > </div> <style type="text/css"> #choose{ width:100px; float:left;} #inputchoose{ width:200px;float:left;} </style> <HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1> <div id="learn" data-role="content"> <label for="test" >学习文章:</label> </div> <div id="inputlearn"> <input name="testname" id="testname" placeholder="请填写学习文章题目" > </div> <style type="text/css"> #learn{ width:100px; float:left;} #inputlearn{ width:400px;float:left;} </style> <HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1> <div data-role="content" > <label for="name">心得体会:</label> <textarea id="feel" name="feel" style=" "></textarea> <!-- 禁止textarea自动增长 --> <script>$(function () { $("#feel").textinput("option", "autogrow", false); })</script> </div> <style> textarea.ui-input-text{min-height:200px;}</style> <HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1> <div data-role="content" > <label >自我评价:</label> <label for="1">1.听导读分享<input name="Fruit1" type="checkbox" value="1" /></label> <label for="2">2.不抱怨 不说累 尽己责<input name="Fruit2" type="checkbox" value="2" /></label> <label for="3">3.看家书点评<input name="Fruit3" type="checkbox" value="3" /></label> <label for="4">4.诵读课文<input name="Fruit4" type="checkbox" value="4" /></label> </div> <input type="submit" value="确定"> </form> <div data-role="footer" data-position="fixed"> <div data-role="navbar" data-position="fixed"> <ul> <li> <a href="http://localhost:8080/zhisland/plugs/mobiscroll/index.html"> <h3> 创建作业 </h3> </a> </li> </ul> </div> </body> </html> ``` 麻烦高手解决一下 第一次做,还不太懂。十分感谢!!
图片上传一直文件损坏,字符集编码也设置了,哪位大神知道什么问题
上传图片损坏,上传txt文件中如果存在中文就会乱码 前端代码 ``` <HTML> <HEAD> <title>上传文件</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </HEAD> <body> <div> <form action="http://192.168.7.69:8080/biz-orange/DN/doctorService/uploadImage" accept-charset="utf-8" method="post" enctype="multipart/form-data"> <input type="file" value="上传" name="file" /> <br /> <input type="submit" value="生成" id="bu" /> </form> </div> </body> </html> ``` Java 上传文件 ``` @POST @Path("/uploadImage") @Produces("multipart/form-data; charset=UTF-8") public String uploadImage(@Context HttpServletRequest request) { ResBody< Map<String,String>> resBody = new ResBody<>(); try { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(4194304*10L); //2M upload.setHeaderEncoding("UTF-8"); //创建文件存储临时目录 List<FileItem> items = upload.parseRequest(request); if(items != null && !items.isEmpty()){ for (FileItem fileItem : items) { System.out.println(fileItem); System.out.println(fileItem.getFieldName()); String filename=fileItem.getName(); String filepath=tempDir+File.separator+filename; System.out.println("文件保存路径为:"+filepath); File file=new File(filepath); // fileItem.write(file); InputStream inputSteam= fileItem.getInputStream(); System.out.println(inputSteam.available()); FileOutputStream out = new FileOutputStream(filepath); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=inputSteam.read(buffer))>0){ //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中 out.write(buffer, 0, len); } //关闭输入流 inputSteam.close(); out.close(); System.out.println("文件:"+filename+"上传成功!"); //保存至fastdfs resBody.setRetCode(ResponseCode.REQUEST_SUCCESS); resBody.setRetDesc("SUCCESS"); } } System.out.println("上传文件成功!"); } catch (Exception e) { e.printStackTrace(); resBody.setRetCode(ResponseCode.DEFALUT_ERROR); resBody.setRetDesc(ResponseCode.CODE_RET_DESC); logger.error(e); } return JSONObject.toJSONString(resBody); } ```
Struts2中如何用Map接收一系列参数?
先说一下我在Struts1中的应用的方法: JSP页面中如下定义两个文本框: [code="html"] <html:text property="condition(ad_nsi_cd_sta)"/> <html:text property="condition(ad_nsi_cd_end)"/> [/code] 在FormBean中如下定义: [code="java"] private Map conditions = new HashMap(); public Object getCondition(String key) { return this.conditions.get(key); } public void setCondition(String key, Object value) { this.conditions.put(key, value); } [/code] 如上所示,参数接收过来,就自动写入了conditions中,形成如下格式: (加入文本框中分别输入了111和222) {(ad_nsi_cd_sta=111),(ad_nsi_cd_end=222)} 等于是自动转换到Map格式,这样的话,之后就可以很方面的处理。 但是在Struts2中如何也能这样实现呢,没有试验成功? 请指教
Jsp静态化问题…………
public class CreateStaticHTMLPage { HttpServlet da= new HttpServlet() { }; public void create(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext, String fileName, String fileFullPath, String jspPath) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312");// 设置HTML结果流编码(即HTML文件编码) RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);// 得到JSP资源 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 用于从ServletOutputStream中接收资源 final ServletOutputStream servletOuputStream = new ServletOutputStream() {// 用于从HttpServletResponse中接收资源 /* # * 我看不懂这里(?)写了servletOutPutStream得write()的两个方法,** # * 这是什么用处和怎么实现的????** */ public void write(byte[] b, int off, int len) { byteArrayOutputStream.write(b, off, len); } public void write(int b) { byteArrayOutputStream.write(b); } @Override public boolean isReady() { // TODO Auto-generated method stub return false; } @Override public void setWriteListener(WriteListener arg0) { } }; final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));// 把转换字节流转换成字符流 HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response) {// 用于从response获取结果流资源 /* # * 这里写的两个方法我也不知道是做什么用的??看了源码,这个类里面并没有这两个方法** # * 这两个方法的用处和实现原理是什么?** */ public ServletOutputStream getOutputStream() { return servletOuputStream; } public PrintWriter getWriter() { return printWriter; } }; rd.include(request, httpServletResponse);// 发送结果流(把带有两个输出流的response发到相应jsp页面) printWriter.flush();// 刷新缓冲区,把缓冲区的数据输出 /* * * 也就是说,把带有两个输出流httpServletResponse发送到对应jsp文件,并printWrite.flush()之后, * servletOuputStream和printwrite都带有相同的html的内容,就是上述HTML内容 # 所以在这里总结一下:为什么flush之后,这两个输出流里面就都有了完整的html信息了呢????百思不得其解啊,求大神解答一下啊,,谢谢啦**** */ FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath); /* 此时的bytearrayoutputstream已经具有了所有的jsp中servletoutputstream的内容*/ /*这里的byteArrayOutputStream流里面又有什么内容,也很迷惑*/ byteArrayOutputStream.writeTo(fileOutputStream);// 把byteArrayOuputStream中的资源全部写入到fileOuputStream中 fileOutputStream.close();// 关闭输出流,并释放相关资源 response.sendRedirect(fileName);// 发送指定文件流到客户端 } }
急!!!安卓程序不能上传照片到服务器
我想做一个app 实现把拍下来的照片传到服务器上,现在可以拍照并保存到手机上面,但无法上传到服务器上,是什么情况? 服务器是用tomcat搭的 安卓上传的代码: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Button; import android.widget.Toast; public class uploadActivity extends Activity { private Button uploadbutton; private String uploadFile = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Test.jpg"; private String srcPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Test.jpg"; private String actionUrl = "http://192.168.1.105:8080/ATestInternetCameraServlet/"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_photo); uploadbutton=(Button)findViewById(R.id.button2); uploadbutton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { uploadFile(); } }); } private void uploadFile() { String uploadUrl = "http://192.168.1.105:8080/ATestInternetCameraServlet/CameraServlet"; String end = "\r\n"; String twoHyphens = "--"; String boundary = "******"; try { URL url = new URL(uploadUrl); HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection(); httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); httpURLConnection.setUseCaches(false); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Connection", "Keep-Alive"); httpURLConnection.setRequestProperty("Charset", "UTF-8"); httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); DataOutputStream dos = new DataOutputStream(httpURLConnection .getOutputStream()); dos.writeBytes(twoHyphens + boundary + end); dos .writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + srcPath.substring(srcPath.lastIndexOf("/") + 1) + "\"" + end); dos.writeBytes(end); FileInputStream fis = new FileInputStream(srcPath); byte[] buffer = new byte[8192]; // 8k int count = 0; while ((count = fis.read(buffer)) != -1) { dos.write(buffer, 0, count); } fis.close(); dos.writeBytes(end); dos.writeBytes(twoHyphens + boundary + twoHyphens + end); dos.flush(); InputStream is = httpURLConnection.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); String result = br.readLine(); Toast.makeText(this, result, Toast.LENGTH_LONG).show();// dos.close(); is.close(); } catch (Exception e) { e.printStackTrace(); setTitle(e.getMessage()); } } } 服务器代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; 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 org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class CameraServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { request.setCharacterEncoding("UTF-8"); // 设置处理请求参数的编码格式 response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值 PrintWriter out2 = response.getWriter(); // 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据 FileItemFactory factory = new DiskFileItemFactory(); // 建立FileItemFactory对象 ServletFileUpload upload = new ServletFileUpload(factory); // 分析请求,并得到上传文件的FileItem对象 List<FileItem> items = upload.parseRequest(request); // 从web.xml文件中的参数中得到上传文件的路径 String uploadPath = "d:\\cameraupload\\"; File file = new File(uploadPath); if (!file.exists()) { file.mkdir(); } String filename = ""; // 上传文件保存到服务器的文件名 InputStream is = null; // 当前上传文件的InputStream对象 // 循环处理上传文件 for (FileItem item : items) { // 处理普通的表单域 if (item.isFormField()) { if (item.getFieldName().equals("filename")) { // 如果新文件不为空,将其保存在filename中 if (!item.getString().equals("")) filename = item.getString("UTF-8"); } } // 处理上传文件 else if (item.getName() != null && !item.getName().equals("")) { // 从客户端发送过来的上传文件路径中截取文件名 filename = item.getName().substring( item.getName().lastIndexOf("\\") + 1); is = item.getInputStream(); // 得到上传文件的InputStream对象 } } // 将路径和上传文件名组合成完整的服务端路径 filename = uploadPath + filename; // 如果服务器已经存在和上传文件同名的文件,则输出提示信息 if (new File(filename).exists()) { new File(filename).delete(); } // 开始上传文件 if (!filename.equals("")) { // 用FileOutputStream打开服务端的上传文件 FileOutputStream fos2 = new FileOutputStream(filename); byte[] buffer = new byte[8192]; // 每次读8K字节 int count = 0; // 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中 while ((count = is.read(buffer)) > 0) { fos2.write(buffer, 0, count); // 向服务端文件写入字节流 } fos2.close(); // 关闭FileOutputStream对象 is.close(); // InputStream对象 out2.println("文件上传成功!xii"); } } catch (Exception e) { } } }
springmvc页面跳转报错,什么原因
严重: Servlet.service() for servlet [mvc-dispatcher] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.springframework.web.util.WebUtils.getResponseEncodedHtmlEscape(Ljavax/servlet/ServletContext;)Ljava/lang/Boolean;] with root cause java.lang.NoSuchMethodError: org.springframework.web.util.WebUtils.getResponseEncodedHtmlEscape(Ljavax/servlet/ServletContext;)Ljava/lang/Boolean; at org.springframework.web.servlet.support.RequestContext.initContext(RequestContext.java:268) at org.springframework.web.servlet.support.RequestContext.<init>(RequestContext.java:169) at org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:135) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:142) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) ``` <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <welcome-file-list> <welcome-file>hello.jsp</welcome-file> </welcome-file-list> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <mvc:annotation-driven/> <mvc:resources location="/static/" mapping="/static/**"/> <!--自动扫描--> <context:component-scan base-package="com.lanyus"/> <!-- 引入配置文件 --> <!--<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">--> <!--<property name="location" value="classpath*:paramConfig.properties" />--> <!--</bean>--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:com/lanyus/*/mapping/*.xml"/> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.lanyus.*.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="roof"/> <property name="maxActive" value="100"/> <property name="maxIdle" value="10"/> <property name="minIdle" value="0"/> <property name="defaultAutoCommit" value="false"/> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property> <property name="contentType" value="text/html" /> <property name="prefix"><value>/WEB-INF/page/</value></property> <property name="suffix"><value>.jsp</value></property> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> <constructor-arg index="1" value="BATCH"/> </bean> </beans> ``` ``` package com.lanyus.user.controller; import com.lanyus.user.entity.User; import com.lanyus.user.service.UserService; import com.lanyus.core.Constant; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; //@Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中 @Controller @RequestMapping("/spring/user") public class UserController { @Resource UserService userService; @RequestMapping("home") public String hot(){ return "main"; } } ```
关于Struts2中实现文件上传
今天下午用Struts2.0做了一个文件上传,一老报错,想请大家帮忙看看 <br />struts.xml如下: <br /><pre name="code" class="java"><!----> <!----> &lt;struts&gt; <!----> &lt;constant name="struts.custom.i18n.resources" value="globalMessages"&gt;&lt;/constant&gt; <!----> &lt;constant name="struts.i18n.encoding" value="UTF-8"&gt;&lt;/constant&gt; &lt;package name="lee" extends="struts-default"&gt; <!----> &lt;action name="Upload" class="lee.UploadAction"&gt; <!----> <param name="savePath" />/upload <!----> &lt;result&gt;/succ.jsp&lt;/result&gt; &lt;/action&gt; &lt;/package&gt; &lt;/struts&gt; </pre> <br /> <br />JSP页面如下: <br /><pre name="code" class="java">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %&gt; &lt;html&gt; &lt;head&gt; &lt;base href="&amp;lt;%=basePath%&amp;gt;"&gt; &lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt; &lt;meta http-equiv="pragma" content="no-cache"&gt; &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt; &lt;meta http-equiv="description" content="This is my page"&gt; <!----> &lt;/head&gt; &lt;body&gt; &lt;form enctype="multipart/form-data" method="post" action="Upload.action"&gt; 选择文件:&lt;input name="file" type="file"&gt;<br /> 文件标题:&lt;input name="titile" type="text"&gt;<br /> &lt;input type="submit" value="提交"&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; </pre> <br /> <br />Action类如下: <br /><pre name="code" class="java">package lee; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { //封装文件标题请求参数的属性 private String title; //封装上传文件域的属性 private File upload; //封装上传文件类型的属性 private String uploadContentType; //封装上传文件名的属性 private String uploadFileName; //接受依赖注入的属性 private String savePath; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getSavePath() { return ServletActionContext.getRequest().getRealPath(savePath); } public void setSavePath(String savePath) { this.savePath = savePath; } @Override public String execute() throws Exception { System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "<br />"); //以服务器的文件保存地址和原文件名建立上传文件输出流 FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName()); System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbbbb" + "<br />"); //以上传文件建立一个文件上传流 FileInputStream fis = new FileInputStream(getUpload()); //将上传文件的内容写入服务器 byte[] buffer = new byte[1024]; int len = 0; while((len = fis.read(buffer)) &gt; 0) { fos.write(buffer, 0, len); } return SUCCESS; } } </pre> <br /> <br />响应页面如下【succ.jsp】: <br /><pre name="code" class="java">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;%@ taglib prefix="s" uri="/struts-tags"%&gt; &lt;% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %&gt; &lt;html&gt; &lt;head&gt; &lt;base href="&amp;lt;%=basePath%&amp;gt;"&gt; &lt;title&gt;My JSP 'succd.jsp' starting page&lt;/title&gt; &lt;meta http-equiv="pragma" content="no-cache"&gt; &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt; &lt;meta http-equiv="description" content="This is my page"&gt; <!----> &lt;/head&gt; &lt;body&gt; 上传成功<br /> <!----> 文件标题:&lt;s:property value=" + title"&gt; <!----> 文件为:<img src="&amp;lt;s:property value=" />"/&gt;<br /> &lt;/body&gt; &lt;/html&gt; </pre> <br /> <br />异常如下: <br /><pre name="code" class="java">2008-11-4 15:49:18 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet default threw exception java.lang.NullPointerException at java.io.FileInputStream.&lt;init&gt;(FileInputStream.java:103) at lee.UploadAction.execute(UploadAction.java:73) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:186) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:268) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Thread.java:595) </pre><br /><strong>问题补充</strong><br />好像是代码<pre name="code" class="java">FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName());</pre> 无法获取,获取的值为空,在XML文件中注入的savePath值取得到<br /><strong>问题补充</strong><br />烦请大家帮忙看看,错误在那里。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c#委托 逆变与协变 c#新建一个项目 c#获取dll文件路径 c#子窗体调用主窗体事件 c# 拷贝目录 c# 调用cef 网页填表c#源代码 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天
立即提问