写代码的一些经验积累(持续更新)

最近出差,有机会在现场看看别人写的一些代码,虽然比较基础感觉还是不错,所以干脆就记录下来。以备下次自己用的时候做个参考。

1、通常需要在Web项目中配置一个首页面作为跳转页面。


<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>

 在index.jsp中再跳转到登录页面


<% RequestDispatcher rd = request.getRequestDispatcher("login/login.jsp"); rd.include(request, response); %>

 这样配置后访问系统登录页面就不需要输入全部的url,只需要确定应用的名字就可以访问。

2、在LoginController中出错后一般是要重新跳转到登录页面,此时一般就是直接将跳转的路径名注入到LoginController中。


<property name="viewName" value="forward:login/login.jsp" />

 在LoginController中直接将注入的viewName作为视图名即可:


if (!checkCode(req, res)) { model.put("errorPrompt", "验证码错误!"); return new ModelAndView(viewName, "model", model); }

 如果将来跳转的路径修改了只需要修改配置文件一处就可以。

3、按钮事件不一定非要用Ajax请求,完全可以将按钮放到页面的某个form表单中。

例如:页面上存在一个id为queryForm的表单,通过修改其action属性值请求不同的Controller。


$("#queryForm").attr("action", "cache.html?method=clearLocalCache"); $("#queryForm").submit();

4、如果CSS不是你的强项,那么建议你使用jqueryUI一些已经做好的样式,这样既节省时间又能达到一个不错的效果。

目前系统中只见过使用jqueryUI的button和dialog组件,其他的组件日后慢慢研究。

5、页面中需要引入外部文件,请用以下路径的形式:


<% String requestURL = request.getRequestURL().toString(); String requestURI = request.getRequestURI(); String contextPath = request.getContextPath(); String base = requestURL.substring(0,requestURL.indexOf(requestURI)) + contextPath; %>
 <link rel="stylesheet" href="<%=base%>/css/cache/index.css" type="text/css">

 这样写在部署现场或是项目迁移的时候会避免很多麻烦事。

6、如何实现一个账号只能在一处登陆

创建一个CheckAuthController可以继承Spring中的MutiActionController。写一个校验的方法checkAuth(),在此方法中可以按照一定的业务规则判断用户是否存在多处登陆的情况,返回一个判断的结果。LoginController校验通过后的每一个Controller都继承于判断多处登录的CheckAuthController并调用其中的checkAuth()方法,如果返回值为true,存在多处登陆的情况则立即重定向到登录页面中去,否则进行相应的业务处理。

7、尽量的将显示页面和代码分离,一般JavaWeb项目采用JSP显示数据,可能的话多使用JSTL标签或是JS脚本代码进行数据的展示以及获取,或是自己封装一些标签用于视图层的显示。EL运算符:

类别运算符
算术运算符 +-*/(或 div)和 %(或 mod
关系运算符 ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge
逻辑运算符 &&(或 and)、||(或 or)和 !(或 not
验证运算符empty

代码示例:

<c:if test="${not empty returnMap and returnMap.flag eq 'false'}"> ${returnMap.message } </c:if>

8、不要忘记使用JSP容器内的四个不同作用域储存和检索数据。应该记得JSP容器的四个作用域,回顾一下:页面作用域(pageScope)、请求作用域(requestScope)、会话作用域(sessionScope)、应用程序作用域(applicationScope)。


9、去掉html中textarea和input的边框样式:

style='overflow:auto; background-attachment: fixed;background-repeat:no-repeat;border-style: solid; border-color: #FFFFFF'

input

style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px '

注:去掉textarea的下拉框overflow:hidden

10、控制表格行的长度。

方式一、使用div+css

<div style="width:100px;text-overflow:ellipsis;overflow: hidden;white-space:nowrap;">

     输入需要控制长度的文本,如果过常自动添加省略号。。。

<div>

方式二、使用jstl标签


<c:choose> <c:when test="${fn:length(maps['LYZT']) > 16}"> <c:out value="${fn:substring(maps['LYZT'], 0, 16)}......" /> </c:when> <c:otherwise> <c:out value="${maps['LYZT']}" /> </c:otherwise> </c:choose>

 在使用JSTL的时候不要忘记引入标签库:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>



11、使用oracle自带函数进行字符串补位。

在数据库中针对字符串的补位操作可以使用lpad和rpad函数。例如学校上课周次默认在25周以内,在排课的时候我们可以使用1表示选中,0表示未选中,周次编号可以使用25个0表示,这样选中的周数和未选中的周数就可以通过01字符串来表示。

 SELECT lpad('1','25','0') FROM dual 

12、javascript去掉字符串中的HTML标签:

function delHtmlTag(str){
   return str.replace(/<[^>]+>/g,"");//去掉所有的html标记
}

13、Query页面查询防止刷新


attributesText="οnsubmit='javascript:return false'"

14、脚本代码中产生Wid

var selectedWid = Epx.GUID();

15、关于oracle截取字符串的操作,今天在项目中遇到一个问题,平台的批量保存在视图模板下无法保存。没有找到原因,索性我自己写代码去保存。保存操作其实是一个更新,主要是记录修改记录的wid和修改后的值。如果传两个list到存储过程中进行遍历,那样效率不是很高。可以将wid和修改后的值拼接在一起用特殊字符$$进行分隔。这样我在存储过程中只需要遍历一次即可,在遍历出拼接的字符串后对字符串进行拆解。

 OPEN V_CUR FOR SELECT COLUMN_VALUE AS ZC FROM TABLE(CAST(TO_TABLE(in_wids) AS TAB_STR));
         LOOP
          FETCH V_CUR INTO V_WIDS;
          EXIT WHEN V_CUR%NOTFOUND;
               SELECT SUBSTR(V_WIDS, 0, INSTR(V_WIDS, '$', 1, 1) - 1),
                      SUBSTR(V_WIDS,
                             INSTR(V_WIDS, '$', -1, 1) + 1,
                             LENGTH(V_WIDS))
                 INTO V_WID, V_SCJLDM
                 FROM DUAL;
                
                 UPDATE T_BYSC_BYSCXSJG g SET g.scjldm = v_scjldm WHERE g.wid = v_wid;
          END LOOP;
        CLOSE V_CUR;
 这里需要记一下substr()和instr()这两个常用函数。简单的说substr用于截取字符串,具体注意一下它的参数,第一个参数表示需要处理的字符串,然后是截取字符串的开始位置,但是最后一个参数不要想当然的认为是截取字符串的结束位置, 而是截取字符串的长度。不注意的话很容易给程序带来不易发现的bug;instr()函数的作用是返回要截取的字符串在源字符串中的位置,其中第一个参数表示源字符串,第二个参数表示目标字符,第三个参数表示从哪个位置开始查找,负数表示从右向左,最后一个参数表示目标字符出现的次数位置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我曾经参与过一个java开发项目,我负责开发一个基于web的财务管理系统。我使用java语言实现了前端页面,使用MySQL数据库存储数据,并使用Maven构建项目。我还负责实现项目中的功能,包括用户管理、财务统计报表和报表导出等功能。 ### 回答2: 在过去的几年里,我积累了丰富的Java开发项目经验。我参与了多个项目的开发,涉及到不同的领域和规模。在这些项目中,我主要负责了需求分析、架构设计、编码实现以及测试工作。 首先,在需求分析阶段,我与团队成员和客户密切合作,了解他们的需求和期望。我会仔细审查需求文档,并与相关方沟通,确保明确了解他们的要求。我会提出问题和建议,以确保最终的需求文档准确无误。 接下来,我会根据需求文档进行架构设计。对于较大规模的项目,我通常采用分层架构,以确保系统的可维护性和扩展性。我会考虑使用哪些开源框架和技术,以提高开发效率和代码质量。在设计过程中,我会注重系统的模块化,以便后续的开发和维护工作。我也会注意系统的性能和安全性,以确保系统能够满足客户的需求。 在编码实现阶段,我会按照设计文档进行具体的编码工作。我注重代码的可读性和可维护性,遵循相关的编码规范和最佳实践。在编码过程中,我注意异常处理、日志记录以及代码的可测试性。我会频繁地提交代码,并与团队成员进行代码审查,以确保代码的质量。 最后,在测试阶段,我会编单元测试和集成测试,以验证系统的功能和性能。我会使用Junit等测试框架进行测试工作。我也会与测试团队进行紧密合作,确保测试用例的覆盖率和准确性。如果发现了问题,我会及时进行修复,并确保系统能够稳定运行。 通过以上经验,我对Java开发工作有了更深入的了解。我喜欢不断学习和探索新的技术,以提高自己的技能。我相信这些经验将使我能够在未来的项目中发挥更大的作用,并取得更好的成果。 ### 回答3: 在我之前的一家公司,我参与了一个Java开发项目。这个项目是为一家电子商务公司开发一个在线购物网站。在这个项目中,我扮演了一个Java开发工程师的角色,负责编后端代码以及与其他团队成员合作完成整体功能。 首先,我们从需求分析开始。我们与业务团队和产品经理一起沟通,了解他们想要实现的功能以及用户的需求。然后,我们将这些需求转化为技术要求,并设计出整体架构和数据库模型。 接下来,我们使用Java作为主要编程语言,使用Spring框架来搭建后端API接口。我们使用了Spring Boot来简化项目的配置,并使用Spring MVC来处理前端请求。此外,我们还使用了Hibernate作为对象关系映射工具,来处理与数据库的交互。 在编代码的过程中,我们注重代码质量和可维护性。我们遵循了面向对象的设计原则,并采用了模块化的架构,以便于代码复用和单元测试。我们还使用了代码审查工具来提高代码的质量,并在开发过程中进行了持续集成和自动化测试。 在与前端团队的合作中,我们使用了RESTful API来进行数据交互,并使用JSON作为数据格式。我们还与前端团队密切协作,解决了一些跨域访问和数据传输的问题。 最终,我们成功地开发出了一个稳定可靠、功能完善的在线购物网站。经过测试和部署,该系统能够支持大量用户同时访问,并能够处理订单、支付和物流等核心功能。 通过参与这个项目,我学到了很多关于Java开发和团队合作的经验。我了解到了软件开发的整个流程,从需求分析到部署上线,并学会了如何与其他团队成员合作,有效地沟通和协调。这些经验对我之后的Java开发工作有了很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值