ssh2 文件上传 action 接收不到 文件的数据 可以接收到其他数据 求大神帮忙!

图片说明
图片说明
图片说明
图片说明
upload 参数接收null
name 有值
如果使用request 里面 MultiPartRequestWrapper 就可以获取到文件信息
为什么不能使用get,set 来获取文件信息呢
求大神指导和帮助

3个回答

若大的技术平台,居然没有会

表单上传类型修改为二进制的

u012440503
level罗 上面的jsp 类型就是二进制的
大约 3 年之前 回复

文件格式的数据要解析
ServletFileUpload uploadfiles = new ServletFileUpload(factory);
// 调用 parseRequest(request)方法 获得上传文件 FileItem 的集合list 可实现多文件上传。
@SuppressWarnings("unchecked")
List list = uploadfiles.parseRequest(request);

u012440503
level罗 为什么不用get ,set 获取文件信息呢
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ssh框架 使用jsp上传文件,后台接收不到文件数据,但是可以接收其他数据,求直接
jsp 代码 <form action="file/upload.action" method="post" enctype="multipart/form-data"> <input type="file" name="upload" /> <input type="text" name="pwd" /> <input type="submit" name="btnUpload" value="上传"> </form> 后台代码: private File upload; private String filename; private String pwd; public String upload() throws Exception{ File uploadFile = new File(ServletActionContext.getServletContext().getRealPath("upload")); if(!uploadFile.exists()) { uploadFile.mkdir(); } System.out.println(pwd); System.out.println(upload); System.out.println(filename); 只有pwd有数据,upload,filename 帮忙看看,谢谢,
在SSH框架中Action接受不到jquery_Ajax的data数据
我的jquery代码是这样的 ``` <script type="text/javascript"> $(document).ready( function(){ $("#btnSearch").click(function(){ var id=$("#sid").val(); $.ajax({ type:"post", url:"${pageContext.request.contextPath }/staffInfo_QuerySInfo.action", contentType:"application/json;charset=UTF-8", async:false, data:{sid:id}, dataType:"json", success:function(json){ console.log(json); var i, x=""; x = json.dataMap.staffInfo.SId; document.getElementById("content").innerHTML = x; }, error:function(){ alert("error"); } }); } ); } ); </script> ``` 表单是这样的 ``` <form class="navbar-form navbar-left" role="search" id="SearchById" > <div class="form-group"> <div class="input-group"> <input id="sid" name="sid" type="text" class="form-control" placeholder="输入编号查询"/> <span class="input-group-btn"> <button id="btnSearch" class="btn btn-default" > <span class="glyphicon glyphicon-search"></span> </button> </span> </div> </div> </form> ``` action的代码如下: ``` package sshpack.action; import java.util.HashMap; import java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import sshpack.entity.StaffInfo; import sshpack.service.StaffInfoService; public class StaffInfoAction extends ActionSupport { private StaffInfoService staffInfoService; public void setStaffInfoService(StaffInfoService staffInfoService) { this.staffInfoService = staffInfoService; } // 根据编号查询 private Integer sid; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } private Map<String, Object> dataMap; public Map<String, Object> getDataMap() { return dataMap; } public void setDataMap(Map<String, Object> dataMap) { this.dataMap = dataMap; } public String QuerySInfo() { String Sid = ServletActionContext.getRequest().getParameter("sid"); if (Sid != null) { sid = Integer.valueOf(Sid); } StaffInfo staffInfo = staffInfoService.QueryStaffInfoById(sid); if (staffInfo != null) { dataMap = new HashMap<String, Object>(); dataMap.put("staffInfo", staffInfo); dataMap.put("success", true); return "queryResult"; } else { return "error"; } } ``` Struts为: ``` <package name="json_data" namespace="/" extends="json-default"> <action name="staffInfo_*" class="staffInfoAction" method="{1}"> <result name="queryResult" type="json"> <param name="root">dataMap</param> </result> </action> </package> ``` ![图片说明](https://img-ask.csdn.net/upload/201905/06/1557143402_391736.png) 我猜是不是这里这句话ServletActionContext.getRequest().getParameter("String")有问题啊,不用这个又要怎么才能接收数据啊 就像这样后台的action得不到数据,sid始终是空的,该怎么解决啊,找了好久都没找到解决办法快崩溃了..............
求大佬帮忙看看,在SSH框架中Action接受不到jquery_Ajax的data数据,该怎么办啊?
我的jquery代码是这样的 ``` <script type="text/javascript"> $(document).ready( function(){ $("#btnSearch").click(function(){ var id=$("#sid").val(); $.ajax({ type:"post", url:"${pageContext.request.contextPath }/staffInfo_QuerySInfo.action", contentType:"application/json;charset=UTF-8", async:false, data:{sid:id}, dataType:"json", success:function(json){ console.log(json); var i, x=""; x = json.dataMap.staffInfo.SId; document.getElementById("content").innerHTML = x; }, error:function(){ alert("error"); } }); } ); } ); </script> ``` 表单是这样的 ``` <form class="navbar-form navbar-left" role="search" id="SearchById" > <div class="form-group"> <div class="input-group"> <input id="sid" name="sid" type="text" class="form-control" placeholder="输入编号查询"/> <span class="input-group-btn"> <button id="btnSearch" class="btn btn-default" > <span class="glyphicon glyphicon-search"></span> </button> </span> </div> </div> </form> ``` action的代码如下: ``` package sshpack.action; import java.util.HashMap; import java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import sshpack.entity.StaffInfo; import sshpack.service.StaffInfoService; public class StaffInfoAction extends ActionSupport { private StaffInfoService staffInfoService; public void setStaffInfoService(StaffInfoService staffInfoService) { this.staffInfoService = staffInfoService; } // 根据编号查询 private Integer sid; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } private Map<String, Object> dataMap; public Map<String, Object> getDataMap() { return dataMap; } public void setDataMap(Map<String, Object> dataMap) { this.dataMap = dataMap; } public String QuerySInfo() { String Sid = ServletActionContext.getRequest().getParameter("sid"); if (Sid != null) { sid = Integer.valueOf(Sid); } StaffInfo staffInfo = staffInfoService.QueryStaffInfoById(sid); if (staffInfo != null) { dataMap = new HashMap<String, Object>(); dataMap.put("staffInfo", staffInfo); dataMap.put("success", true); return "queryResult"; } else { return "error"; } } ``` Struts为: ``` <package name="json_data" namespace="/" extends="json-default"> <action name="staffInfo_*" class="staffInfoAction" method="{1}"> <result name="queryResult" type="json"> <param name="root"> dataMap </param> </result> </action> </package> ``` ![图片说明](https://img-ask.csdn.net/upload/201905/06/1557144308_254875.png) 我猜是不是这里这句话ServletActionContext.getRequest().getParameter("String")有问题啊,不用这个又要怎么才能接收数据啊 就像这样后台的action得不到数据,sid始终是空的,该怎么解决啊,找了好久都没找到解决办法........
ssh服务器怎么接收安卓端发送的java对象。
请问前端用xutils框架传输对象,后端如何接收? 目前前端是直接把对象放到setParameter()里然后传输。后端使用模型驱动接收。 具体的是要取模型驱动对象里面的对象属性。看图就是OrderAndItems模型里面有Order对象。 ![图片说明](https://img-ask.csdn.net/upload/201708/05/1501926262_363873.png) 直接模型驱动取的话,没有order对象只有String字符串,正常。一加上order就找不到我的接口Could not find action or result...
使用struts,action中始终接收不到前端传来的参数
要崩溃了。。。。。。。。。。。求助。。。。。。。。。。。。。。 网页部分只有一个form表单: ``` <form method="post" action="login.action" name="form"> <input name="user.username" placeholder="用户名" type="text"> <input name="user.password" placeholder="密码" type="password"> <input value="登录" style="width: 100%;" type="submit"> </form> ``` 请求的action: ``` <action name="login" class="com.struts.action.IndexAction" method="login"> <result name="failed">/error.html</result> <result name="success">/index.html</result> </action> ``` model部分: ``` public class UserModel { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` action方法: ``` private UserModel user; public UserModel getUserModel() { return user; } public void setUserModel(UserModel userModel) { this.user = userModel; } public String login() throws Exception{ String name = getUserModel().getUsername(); //此处为第49行,报错 String password = getUserModel().getPassword(); System.out.println("name : " + name + " password : " + password); return "failed"; } ``` 错误信息: ``` Type Exception Report Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception java.lang.NullPointerException com.struts.action.IndexAction.login(IndexAction.java:49) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) Note The full stack trace of the root cause is available in the server logs. ``` web.xml中的配置: ``` <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MyWebset</display-name> <welcome-file-list> <welcome-file>launch.html</welcome-file> </welcome-file-list> <!-- 配置struts2过滤器 --> <filter> <!-- 配置Struts2核心Filter的名字 --> <filter-name>my</filter-name> <!-- 统一处理 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!-- 初始编码设置 --> <init-param> <!-- 配置Struts2框架默认加载的Action包结构,可以没有。 --> <param-name>struts.i18n.encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!-- 配置Filter拦截的URL --> <filter-mapping> <filter-name>my</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ```
java ssh项目中如果没有执行完上一次action请求的页面跳转,这个按钮不能被再次点击
点击这个按钮的action会发送一条消息到客户端,action接收到客户端返回的消息(过程可能达到20秒)后跳转到另一个页面,这段时间要防止管理人员再次点击这个类型的按钮覆盖上一次action
json ssh ztree 无数据返回到页面
``` package com.action; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.fastjson.JSON; import com.base.BaseService; import com.entity.Administrator; import com.entity.PowerEntity; import com.instrument.Parameter; public class IndexAction { @Autowired BaseService baseservice; @Autowired SessionFactory sessionFactory; List<String> pnamelist = new ArrayList<String>(); List<ZtreeJS> ztreelist = null; @Action(value = "index", results = { @Result(name = "success", location = "/WEB-INF/jsp/index.jsp"), @Result(name = "defeated", location = "/login.jsp") }) // 登录的方法 public String index() { HttpServletRequest request = ServletActionContext.getRequest(); Parameter.CoustomParameter(Administrator.class, request); String hql = "from admin where account=? and apassword=? "; Session session = sessionFactory.openSession(); Query<Administrator> query = session.createQuery(hql); query.setParameter(0, request.getParameter("username")); query.setParameter(1, request.getParameter("password")); List<Administrator> adminlist = query.list(); if (adminlist.size() > 0) { System.err.println("登录成功"); session.close(); for (Administrator administrator : adminlist) { qureyPostId(administrator.getAid()); } return "success"; } else { System.err.println("登录失败"); session.close(); return "defeated"; } } public void qureyPostId(int uid) { List<Integer> pidlist = new ArrayList(); Session session = sessionFactory.openSession(); Query<Object[]> query = session.createQuery("select r.rid from role r join r.listadmin u where u.aid=" + uid); List<Object[]> userlist = query.list(); for (Object ob : userlist) { pidlist.add((Integer) ob); session.close(); } qureyjuriId(pidlist); session.close(); } public void qureyjuriId(List<Integer> pidlist) { List<Integer> powerlist = new ArrayList(); Session session = sessionFactory.openSession(); int pidlsitsize = pidlist.size() - 1; Query<Object[]> query = session.createSQLQuery("select pid from role_power p where rid=" + pidlist.get(pidlsitsize)); List<Object[]> userlist = query.list(); for (Object ob : userlist) { powerlist.add((Integer) ob); session.close(); } qureyjuriName(powerlist); session.close(); } public void qureyjuriName(List<Integer> jidlist) { pnamelist = new ArrayList(); Session session = sessionFactory.openSession(); for (Integer integer : jidlist) { Query<PowerEntity> query = session.createQuery("from power p where p.pid=" + integer); List<PowerEntity> userlist = query.list(); for (PowerEntity ob : userlist) { pnamelist.add(ob.getPname()); } } for (String integer : pnamelist) { System.out.println(integer); } session.close(); } @Action(value = "ztree") public void ztree() { HttpServletResponse response = ServletActionContext.getResponse(); List<ZtreeJS> ztreelist = new ArrayList<ZtreeJS>(); for (String string : pnamelist) { ZtreeJS z = new ZtreeJS(); z.setName(string); ztreelist.add(z); } String data = JSON.toJSONString(ztreelist); try { response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.write(data); out.flush(); out.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ``` ``` 后台查询有数据,前台接收不了, ```
java web项目整合一个图片上传webUploader
因为是初学者,所以想写个ssh的小项目,练练手, 在网上下了一个商城的后台模板,最近正在实现功能, 现在写到了,新增商品时的上传功能, 模板自带的上传是用的webUploader, 现在遇到的问题是图片上传的时候不知道怎么保存在服务器中, 代码如下: html: <div class="clearfix cl"> <label class="form-label col-2">图片上传:</label> <div class="formControls col-10"> <div class="uploader-list-container"> <div class="queueList"> <div id="dndArea" class="placeholder"> <div id="filePicker-2"></div> <p>或将照片拖到这里,单次最多可选300张</p> </div> </div> <div class="statusBar" style="display:none;"> <div class="progress"> <span class="text">0%</span> <span class="percentage"></span> </div> <div class="info"></div> <div class="btns"> <div id="filePicker2"></div> <div class="uploadBtn">开始上传</div> </div> </div> </div> </div> </div> js: $(function(){ $('.skin-minimal input').iCheck({ checkboxClass: 'icheckbox-blue', radioClass: 'iradio-blue', increaseArea: '20%' }); $list = $("#fileList"), $btn = $("#btn-star"), state = "pending", uploader; var uploader = WebUploader.create({ auto: true, swf: 'lib/webuploader/0.1.5/Uploader.swf', // 文件接收服务端。 server: 'fileUpload.action', // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: '#filePicker', // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize: false, // 只允许选择图片文件。 accept: { title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' } }); }); 问题是, // 文件接收服务端。 server: 'fileUpload.action', 在网上查的这个属性是文件接收服务器端,如果我给一个Action,它会显示上传成功![图片说明](https://img-ask.csdn.net/upload/201706/25/1498386878_982619.png) 就算是上传成功,在服务器也找不到这个图片, 但是,原页面和网上搜到的一些例子都是 // 文件接收服务端。 server: 'http://webuploader.duapp.com/server/fileupload.php', 以php结尾的文件,这个是有什么问题,求解释 如果我修改成这个文件,就上传失败了, 这个属性值到底是给什么,还有,我怎么能获取到他的路径,文件名称,是在Action中定义file属性,get,set,获取他的值吗?
求助,怎样做Excel大文件上传,解析。
做一个通过jsp上传Excel文档,后台进行解析的功能,项目是struts2,一开始,我是这样写的: jsp: <div id="dlg2" class="easyui-dialog" style="width:400px;height:180px;padding:10px 20px" closed="true" buttons="#dlg-buttons2"> <form id="uploadForm" method="post" enctype="multipart/form-data"> <table style="width:320px;height:80px;"> <tr> <td>下载模版:</td> <td><a href="javascript:void(0)" class="easyui-linkbutton" onclick="downloadTemplate()">下载模板文件</a></td> </tr> <tr> <td>上传文件:</td> <td><input type="file" name="userUploadFile" id="selectedExcel"></td> </tr> </table> </form> </div> <div id="dlg-buttons2"> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="uploadFile()">导入</a> <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg2').dialog('close')">关闭</a> </div> js: function uploadFile(){ debugger; var fileName = $('#selectedExcel').val(); if(fileName == ""){ $.messager.alert('提示','请选择上传文件!','info'); return; } fileext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length); fileext = fileext.toLowerCase(); if (fileext == 'xls' || fileext == 'xlsx'){ $.messager.progress({title:'提示',msg:'正在导入,请稍候...'}); $("#uploadForm").form('submit',{ type : "post", url : "<%=basePath%>" + "ImportAndExport/DataImport.action?selType=" + selType + "&fileext=" + fileext, data : "", dataType : "json", success : function(result){ $.messager.progress("close"); var data = result.split("\""); $.messager.alert('提示',data[1],'info'); }, }); } else{ $.messager.alert('提示','请选择xls/xlsx格式文件!','info'); } } 后台action接收方法: public String upload() throws Exception{ try { HttpServletRequest request = ServletActionContext.getRequest(); String selType = request.getParameter("selType"); String fileext = request.getParameter("fileext"); ImportServiceImpl isi = new ImportServiceImpl(); resultTip = isi.importExcelByType(userUploadFile, selType, fileext); } catch (Exception e) { resultTip = "导入失败!请参考:" + e.getMessage(); e.printStackTrace(); } return "importResult"; } service进行解析: public String importExcelByType(File f,String type,String ext){ Workbook workbook = null; int recordNum = 0;//记录插入记录数 try { if(XLS.equals(ext)){ workbook = new HSSFWorkbook(new FileInputStream(f)); } else if(XLSX.equals(ext)){ workbook = new XSSFWorkbook(new FileInputStream(f)); } Sheet sheet = workbook.getSheetAt(0); 直接用new XSSFWorkbook(new FileInputStream(f))或new HSSFWorkbook方法,获得Workbook对象。 但是,我要解析的Excel文件数据量比较大,一般都是10万条左右,获得Workbook对象的这一步直接内存溢出,拆到一万条一个文件的时候可以跑,但是十分钟很慢,于是上网找了找其他的解析Excel方法,找到了一个号称占用小速度快的,Eclipse跑了有效: [](http://blog.csdn.net/lishengbo/article/details/40711769 "") 我把这个代码拿过来用,加了个返回值List<String[]>的readExcel方法,内容就是: public static List<String[]> readExcel(String f,int columnNum) throws Exception{ // List<String[]> list=XLSXCovertCSVReader.readerExcel("d:\\a.xlsx", "sheet1", 45); List<String[]> list = XLSXCovertCSVReader .readerExcel( // "C:\\Users\\hbkn\\Desktop\\dnbb亳州导入数据\\dnbb亳州\\中压基础数据查询结果\\中压测试.xlsx", "d:\\a.xlsx", "Sheet1", 45); return list; } 然后我高高兴兴拿过来用,修改action方法如下: public String upload() throws Exception{ InputStream is=null; OutputStream os=null; String temp="d:\\a.xlsx"; try { is = new BufferedInputStream(new FileInputStream(userUploadFile)); os = new BufferedOutputStream(new FileOutputStream(temp)); byte[] buffer = new byte[1024]; int len=0; while((len=is.read(buffer))>0){ os.write(buffer,0,len); } HttpServletRequest request = ServletActionContext.getRequest(); String selType = request.getParameter("selType"); String fileext = request.getParameter("fileext"); ImportServiceImpl isi = new ImportServiceImpl(); resultTip = isi.importExcelByType1(temp, selType, fileext); }catch(Exception e){ resultTip= "导入失败!请参考:" + e.getMessage(); e.printStackTrace(); }finally{ if(is !=null){is.close();} if(os!=null){os.close();} } return "importResult"; } 修改service方法如下: public String importExcelByType1(String f,String type,String ext){ try { String[] colArr = getColumnName(type).split(","); HashMap<String, String> colMap = new HashMap<String, String>(); for(int i = 0;i < colArr.length;i++){ colMap.put(colArr[i].split(":")[0], colArr[i].split(":")[1]); } List<String[]> readExcel = XLSXCovertCSVReader.readExcel(f, colArr.length); System.out.println(readExcel.size()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ext; } 发现报: org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: 'd:\a.xlsx' at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:106) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:221) at com.ssh.effectiveCheck.util.XLSXCovertCSVReader.readerExcel(XLSXCovertCSVReader.java:451) at com.ssh.effectiveCheck.util.XLSXCovertCSVReader.readExcel(XLSXCovertCSVReader.java:480) at com.ssh.effectiveCheck.service.impl.ImportServiceImpl.importExcelByType1(ImportServiceImpl.java:45) at com.ssh.effectiveCheck.action.ImportAction.upload(ImportAction.java:72) 。。。。。 Caused by: java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:219) at java.util.zip.ZipFile.<init>(ZipFile.java:149) at java.util.zip.ZipFile.<init>(ZipFile.java:163) at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipFile(ZipHelper.java:174) at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:104) ... 75 more 但是我手动修改了的解析类里的需要解析的Excel文件路径,不再让它解析我上传后的Excel,而是解析本地的原本的Excel(tomcat服务安装在本地),不报这个错了,list也成功取到了。 也就是说网上找到的这个解析方法不认我上传之后的Excel文件(明明WPS一样可以打开)。 在这个过程中,我又动了歪脑筋,这个服务是单机版,以后部署也是单机,那我能不能不上传,直接让服务解析本地的Excel呢? 所以,各位高手,我想得到解决方案(任一即可), 1。通过jsp获取一个文件的本机绝对路径(我用var fileName = $('#selectedExcel').val();试了,debug显示是fileName = "C:\fakepath\中压测试1.xlsx",这个并不是真实路径)。 2.求正确的上传Excel文件的方法,能让上面链接里代码可以成功解析的那种。 3.Workbook解析Excel大文件的正确姿势,能不能做到分段,占用内存小,速度快的那种。
Struts2 <s:action>能接受参数,但是不能使用Action
没有办法执行下去“ int sid_int=Integer.valueOf(sid);”这部分 why? 思路:想在 lookstock.jsp页面上显示出 某一张采购单 和 这张采购单的明细(这里两张表) 通过页面上的<s:action> 来获取到这张采购单的明细信息。怎么样我也没有办法执行下去后面。总显示不到明细。 StockdetailAction ``` package ssh2.jxc.wjr.action; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import ssh2.jxc.wjr.service.IStockdetailService; import ssh2.jxc.wjr.service.IStockinfoService; import ssh2.jxc.wjr.vo.Stockdetail; import ssh2.jxc.wjr.vo.Stockinfo; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; @Controller public class StockdetailAction extends ActionSupport { @Resource private IStockdetailService stockdetailService; private String sid; //接收提交上来的sid(采购表单号) public String execute() { // TODO Auto-generated method stub return SUCCESS; } //获取对应的采购信息的详细信息 public String browseStockdetail() { //test System.out.println("sid:"+sid); int sid_int=Integer.valueOf(sid); System.out.println(sid_int); List<Stockdetail> stockdetails=stockdetailService.getStockdetailsBySid(sid_int); Map request=(Map) ActionContext.getContext().get("request"); request.put("stockdetails", stockdetails); System.out.println("stockdetails:"+stockdetails); return SUCCESS; } //getting setting public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } } ``` looksotck.jsp ``` <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <title>采购查看</title> </head> <body bgcolor="#EBF5FD"> <table width="100%" height="44" bgcolor="#206AB3"> <tr align="center"><td> <font color="#FFFFFF" size="5">采购信息管理</font> <font color="#FFFFFF" size="2">--明细查看</font> </td></tr> </table> <table> <tr><td><a href="JavaScript:history.back()"> <img border="0" src="img/back.jpg"/></a><!-- 返回按钮 --> </td></tr> </table> <hr color="black" size="1"/> <table width="100%" border="0" cellspacing="1" bgcolor="black"> <caption>采购信息</caption> <tr bgcolor="#D1F1FE" align="center"> <th>表单号</th> <th>供应商</th> <th>采购日期</th> <th>总价</th> <th>采购人</th> </tr> <tr bgcolor="white" align="center"> <td><s:property value="#request.stockinfo.sid"/></td><!-- 显示采购表的id号 --> <td><s:property value="#request.stockinfo.providerinfo.pname"/></td><!-- 显示供应商名称 --> <td> <s:property value="#request.stockinfo.sdate.getYear()+1900" />- <!-- 获取年月日 --> <s:property value="#request.stockinfo.sdate.getMonth()+1" />- <s:property value="#request.stockinfo.sdate.getDate()" /> </td><!-- 显示采购日期 --> <td><s:property value="#request.stockinfo.stotalprice"/></td><!-- 显示采购总价 --> <td><s:property value="#request.stockinfo.sbuyer"/></td><!-- 显示采购操作人 --> </tr> </table> <s:action name="browseStockdetail" executeResult="true"> <s:param name="sid" value="sid"> <s:property value="#request.stockinfo.sid"/> </s:param> </s:action> <s:if test="#request.stockdetails.size()>0"> <br/> <table width="100%" border="0" cellspacing="1" bgcolor="black"> <caption>采购明细</caption> <tr bgcolor="#D1F1FE" align="center"> <th>商品名称</th> <th>商品数量</th> <th>商品单价</th> <th>商品总价</th> </tr> <s:iterator value="#reques['stockdetails']" id="stockdetails" status="iteratorStatus" > <s:if test="!#iteratorStatus.odd"><!-- 显示单数的记录 --> <tr bgcolor="#EBF5FD" align="center"> <td><s:property value="stockdetails.goodsinfo.gname"/></td><!-- 显示商品名称 --> <td><s:property value="stockdetails.goodsinfo.gamount"/></td><!-- 显示商品数量 --> <td><s:property value="stockdetails.goodsinfo.gpin"/></td><!-- 显示商品单价 --> <td><s:property value="%{stockdetails.goodsinfo.gpin*gamount}"/></td><!-- 显示商品总计 --> </tr> </s:if> <s:elseif test="!#iteratorStatus.even"><!-- 显示双数的记录 --> <tr bgcolor="white" align="center"> <td><s:property value="stockdetails.goodsinfo.gname"/></td><!-- 显示商品名称 --> <td><s:property value="stockdetails.goodsinfo.gamount"/></td><!-- 显示商品数量 --> <td><s:property value="stockdetails.goodsinfo.gpin"/></td><!-- 显示商品单价 --> <td><s:property value="%{stockdetails.goodsinfo.gpin*gamount}"/></td><!-- 显示商品总计 --> </tr> </s:elseif> </s:iterator> </table> </s:if> </body> </html> ```
JAVAd 大神请指教,小弟这先感谢了
我是JAVA菜鸟,技术是SSH+JSP。目前新进一个公司,用的应该是SpringMVC +ftl模板,他们用的技术不是form表单,据说用的啥配置,比如ftl名字是user_register,ftl,访问地址是:localhost:8080/test/user!toRegister.action.那么在UserAction里面就有一个方法,返回“register",另外用的是泛型类,比如public class BaseService<T,PK extends Serializable>.实体类用的是注解,都不用在hibernate里配置了,据说直接映射到数据库??啊,我不懂啊,谁 有一套完整的相关的学习资料,感激不尽。 先说一下我会的技术,我之前用的是form提交,然后在action里处理,在struts里根据返回的字符串处理跳转,传递数据也不是用的泛型类,比如action传递到biz层,直接调用方法传递一个对象,在biz层通过形参接收;用的是Hibernate.cfg.xml和class.hbm.xml,这技术跟他们差好远啊,他们都说这些直接在配置文件里面配置的。。。谁能懂我差的是什么吗?给套完整的学习视频呀
JSP搜索联想框,新手求指教。
不是用的SSH框架,DAO用JDBC,项目赶工,DAO和Service整合在了一起,我是半路插入的~各位大神先别吐槽……咱先把问题解决再美化~谢谢 页面结构如下 ``` <input name="accountName" id="accountName" class="yhgl_ser required inputElem" onkeyup="getLinkData();" value="<%StringHelper.filterHTML(out, request.getParameter("accountName"));%>" /> <div id="popup" style="position: absolute;"> <table width="100%" bgcolor="#fffafa"> <tbody id="popupBody"></tbody> </table> </div> ``` JS代码如下(借鉴了很多网上的JS方法) ``` <script type="text/javascript"> function getLinkData() { var popupDiv = document.getElementById("info");//获得对应的div对象 var popupBody = document.getElementById("popupBody");//获得对应的tbody对象 var linkDataProperty = document.getElementById("accountName"); //获得对应的输入框对象 clearModels();//清除联想输入提示框的内容 //利用ajax获取后台的模糊查询的数据,并且封装成下拉列表的形式展现出来 $.ajax({ type : "post",//提交的方法为post //对应的Action提交的路径 url : "<%configureProvider.format(out, URLVariable.SEARCH_ACCOUNT);%>", data:{linkDataProperty:linkDataProperty.value},//从前台传递到后台的查询语句的参数 dataType : "json", //从Action中返回的数据的类型为json类型的 error:function(){ alert("没有对应的数据,请查看输入的查询条件!"); }, success : function(data) {//当Ajax提交成功时调用的方法 if(data.length==0){return;} setOffsets();//设置联想输入下拉列表提示框的位置 var tr,td,text; for (var i = 0; i < data.length; i++) {//根据返回的值,手动的拼tbody的内容 text = document.createTextNode(data[i].linkDataProperty);//从Action中返回的数据中取出linkDataProperty的值 td = document.createElement("td");//创建一个td的对象 tr = document.createElement("tr");//创建一个tr的对象 td.mouseOver = function(){this.className="mouseOver;"}; td.mouseOut = function(){this.className="mouseOut;"}; td.onclick = function(){populateModel(this)};//单击td是的方法为populateModel td.appendChild(text); tr.appendChild(td); popupBody.appendChild(tr); } }}); //点击下拉列表中的某个选项时调用的方法 function populateModel(cell) { clearSelect(); linkDataProperty.value = cell.firstChild.nodeValue; //initOtherData(linkDataProperty.value);利用输入框中的数据调用其他方法,初始化其他数据 clearModels();//清除自动完成行 } //清除自动完成行,只要tbody有子节点就删除掉,并且将将外围的div的边框属性设置为不可见的 function clearModels() { while (popupBody.childNodes.length > 0) { popupBody.removeChild(popupBody.firstChild); } popupDiv.style.border = "none"; } //设置下拉列表的位置和样式 function setOffsets() { var width = linkDataProperty.offsetWidth;//获取linkDataProperty输入框的相对宽度 var left = getLeft(linkDataProperty); var top = getTop(linkDataProperty) + linkDataProperty.offsetHeight; popupDiv.style.border = "black 1px solid"; popupDiv.style.left = left + "px"; popupDiv.style.top = top + "px"; popupDiv.style.width = width + "px"; } //获取指定元素在页面中的宽度起始位置 function getLeft(e) { var offset = e.offsetLeft; if (e.offsetParent != null) { offset += getLeft(e.offsetParent); } return offset; } //获取指定元素在页面中的高度起始位置 function getTop(e) { var offset = e.offsetTop; if (e.offsetParent != null) { offset += getTop(e.offsetParent); } return offset; } } //清空输入框中的数据 function clearSelect() { var linkDataProperty=document.getElementById(linkDataProperty); linkDataProperty.value=""; } </script> ``` Servlet代码如下 ``` protected void processPost(HttpServletRequest request, HttpServletResponse response, ServiceSession serviceSession) throws Throwable { //往后传数据 System.out.println("进入servlet,将传入后台:"+request.getParameter("accountName")); //获得DAO服务 ZhglManage manage = serviceSession.getService(ZhglManage.class); //获得前台数据并往后台发送,同时接收返回的结果 String accounts = manage.searchAccountInOneResult(request.getParameter("accountName")); //往前端发送 PrintWriter out = response.getWriter(); System.out.println("返回servlet,即将返回获得的结果:"+accounts+" 给页面"); out.print(accounts); out.close(); } ``` DAO加Service代码如下: ``` public String searchAccountInOneResult(String inputing) throws Throwable { //尝试了Gson但也没成功 Gson gson = new Gson(); System.out.println("进入DAO,传入的参数是:"+inputing); //map方式 Map<String, String> rsMap = new HashMap<String,String>(); String account = ""; String key = ""; //获得连接 Connection conn = getConnection(); //准备SQL语句,获得单列账号信息 String sql = "SELECT @ROW := @ROW +1 AS ROW , t.F02 AS accountName FROM S61.T6110 t, ( SELECT @ROW :=0 )r WHERE t.F02 LIKE '"+inputing+"%' LIMIT 10"; PreparedStatement pstm = conn.prepareStatement(sql); //执行SQL ResultSet rs = pstm.executeQuery(); //获得结果 while(rs.next()){ //map方式 key = rs.getString("accountName"); account = rs.getString("accountName"); rsMap.put(key, account); } String temp = gson.toJson(rsMap); System.out.println("正在打印gson:"+temp); return temp; } ``` 然后控制台是这样的 进入servlet,将传入后台:1 进入DAO,传入的参数是:1 正在打印gson:{"12342@qq.com":"12342@qq.com","12344@qq.com":"12344@qq.com","100@qq.com":"100@qq.com"} 返回servlet,即将返回获得的结果:{"12342@qq.com":"12342@qq.com","12344@qq.com":"12344@qq.com","100@qq.com":"100@qq.com"} 给页面 firefox控制台和页面效果是这样的 ![图片说明](https://img-ask.csdn.net/upload/201505/18/1431943341_591979.png) 我对JS什么的不怎么懂,来请教下各位我哪里有问题,解决方法或者说解决思路应该是怎样的
struts2+spring+hibernate 应用displaytag 添加链接请疑惑
<%@ page language="java" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <%@ taglib uri="http://displaytag.sf.net/el" prefix="display"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" type="text/css" href="css/screen.css"> <head /> <body> <display:table name="list" pagesize="4" requestURI="test.action" export="true"> <display:column property="name" sortable="true" title="姓名" href="search.do" paramId="id" paramProperty="id" /> <display:column property="check" sortable="true" title="审核情况" /> </display:table> </body> </html> 做好了个分页, 现在想实现点击分页记录,然后发出一个请求给Action处理,然后转发到另外一个页面显示详细信息。 就像代码所写 href="search.do" paramId="id" paramProperty="id" 带参数的请求 那我的 SSH 如何接受这个请求? 我是用struts2+spring+hibernate做的框架的。 现在弄不清楚href发出的请求,怎么接收,请大家帮帮忙!谢谢了!
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问