您的位置:首页 > 编程语言 > Java开发

Javaweb开发遇到的问题及解决方案(2017.5.18)

2017-08-29 17:43 661 查看
1.利用eclipse新建的Java web项目没有部署描述符web.xml文件怎么办?

右键项目名称->Java EE Tools->Generate Deployment descriptor stub

2.项目发布时,src文件夹里的java源文件编译后生成的.class字节码文件在哪个文件夹里?

发布到tomcat时(在eclipse里启动tomcat),src文件夹里的java文件经过编译后,会把.class文件放在WEB-INF文件夹里的classes文件夹中,编译时会自动生成。

3.JavaScript中,history.go(-1)和History.back()的区别?

go(-1): 返回上一页,原页面表单中的内容会丢失;back(-1):返回上一页,原页表表单中的内容会保留,一般还是back(-1)用的多。

window.location.reload() //刷新

window.history.go(1) //前进

window.history.go(-1) //后退

window.history.forward() //前进

window.history.back() 后退+刷新

4.Javaweb项目开发中中文显示乱码问题,该如何解决?

Jsp前台页面出现乱码:

①最主要原因就是jsp页面编码问题,给页面添加如下<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">即可解决。

外部JS(JavaScript文件)出现乱码:

①这种比较头疼,调用的外部*.js(独立的JavaScript),其中js文件中涉及向前台输入中文,比方:$("#divNameError").html("请输入姓名");document.getElementById("theClock").innerHTML=”你好”;显示乱码,而如果把js代码直接写在前端jsp页面中就正常显示,导致的原因是*.js与*.jsp文件编码不统一导致的,可以通过NotePad++转换编码即可。
servlet后台获取前端数据出现乱码:

①后台servlet添加:request.setCharacterEncoding("UTF-8");
                    response.setCharacterEncoding("UTF-8");

②从不同编码的前台获取数据添加:String linename = newString(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
③还有一种就是通过form表单提交数据时,没有写method属性,导致后台一直获取到乱码。
比较通用的方法可以,直接更改Tomcat server.xml文件,

5.WEB-INF下如何实现*.jsp文件的互相跳转?
    我们知道WEB-INF权限比较高,不允许直接的公共访问,也就意味着我们得新建servlet形式来进行访问。但对于那种只要求实现跳转页面需求而不需要后台进行数据处理的,显然这种方式比较low。那能否在不建任何后台中间件的情况下,实现页面的跳转呢?其实是可以的。
在web.xml文件下配置:



前台的获取方式为:



注意:其中<jsp-file>名为实际跳转页面的路径,文件必须存在;而<url-pattern>名无特别限制可以任取,有意义就行。前台的获取采用项目名+url名的形式,这点比较特殊。
这种方法不是特别推荐,最好的方式是新建一个共通的servlet,通过传参的形式实现。
后台共通servlet代码:



前台代码:



6.输入框获取焦点阴影特效的实现?(边框效果)
   


box-shadow 属性向框添加一个或多个阴影。基本语法是{box-shadow:[inset] x-offset y-offset blur-radius spread-radiuscolor}对象选择器
{box-shadow:[投影方式] X轴偏移量 Y轴偏移量阴影模糊半径阴影扩展半径阴影颜色}
7. 用超链接进行页面跳转时日历WdatePicker()控件不可用,而单独运行此页面时却可以使用,这是为什么?



       如果将*.jsp放在WEB-INF目录外,采用超链接href的方式确实可以正常跳转页面,但跳转到的页面,所有外部调用的js都没有加载进来,所以是不可用的。建议如果跳转页面存在js加载,最好采用servlet后台方式实现页面跳转。

8.Jsp页面显示时间,并同步实时更新如何实现?
 


9.Jsp图片轮播的实现,并且可以进行鼠标点击控制。下面代码采用jQuery实现,比较通用。
       <script type="text/javascript">
       $(function(){
         //鼠标滑过banner,左右按钮进行显示和隐藏
         $(".banner").hover(function(){
           $(".lr").show();
         },function(){
           $(".lr").hide();
         });
   //点击下面的小按钮(小按钮为列表li),图片进行左右切换效果
        $(".anniu li").click(function(){
              //jQuery
遍历,siblings()获得匹配集合中每个元素的同胞。removeClass()方法移除被选元素
         $(this).addClass("on").siblings().removeClass("on");
          var num=$(this).index();
          //jQuery animate()方法,动画渐变。 marginLeft元素的左外边距,slow速度等级
         $(".pic").animate({marginLeft:-200*num},"slow");
        });
   //图片自动轮播效果
   var a=0;
   varautomatic=setInterval(function(){
            a++;
            a=a%5;
           $(".pic").animate({marginLeft:-200*a},"slow");
            $(".anniuli").eq(a).addClass("on").siblings().removeClass("on");
       },6000);
             //点击左右按钮,图片进行切换效果
          $(".pre").click(function(){
            a--;
            a=(a+5)%5;
           $(".pic").animate({marginLeft:-200*a},"slow");
            $(".anniuli").eq(a).addClass("on").siblings().removeClass("on");
          });
          $(".next").click(function(){
            a++;
            a=a%5;
            $(".pic").animate({marginLeft:-200*a},"slow");
            $(".anniuli").eq(a).addClass("on").siblings().removeClass("on");
          });
       });

</script>

     <ulclass="pic">
       <li>
          <ahref="#"><img src="resource/images/ali.png"alt="头像" width="200" height="200"></a>
       </li>
       <li>
          <ahref="#"><img src="resource/images/ali2.png"alt="头像" width="200"height="200"></a>
       </li>
       <li>
          <ahref="#"><img src="resource/images/ali3.png"alt="头像" width="200" height="200"></a>
       </li>
       <li>
          <ahref="#"><img src="resource/images/drem.png"alt="头像" width="200"height="200"></a>
       </li>
       <li>
          <ahref="#"><img src="resource/images/kuer.png"alt="头像" width="200"height="200"></a>
       </li>
     </ul>
     <ulclass="anniu">
       <liclass="on"></li>
       <li></li>
       <li></li>
       <li></li>
       <li></li>
     </ul>
     <ulclass="lr">
       <liclass="pre"><a href="#"> <</a></li>
       <liclass="next"><a href="#"> ></a></li>
     </ul>
 
10. button如何按钮实现页面传参、跳转?
··


 
11.从后台取值,判断前台单选按钮是否选中的实现方法。
 


 
12. jsp页面中输出百分比如何实现?
从代码最简方面考虑可以采用jstl提供的方法,需要导入<%@ taglib prefix="f"uri="http://java.sun.com/jsp/jstl/fmt"%>

 


13.比方说,数据插入到数据库成功。后台如何向前台输出提示信息,或者后台如何调用js到前台?
 


14. eclipse导入jQuery-1.8.2.min.js老是报错,显示红色的叉叉,但不影响使用。有什么办法可以去掉红色的错误吗?
  去除编译器js的验证:Window<Preferences<JavaScript<Validator<Errors/Warnings中Enable JavaScript semantic validation前面的钩去掉。
  删除.project文件中的
                    <buildCommand>
                           <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
                           <arguments>
                           </arguments>
                    </buildCommand>
此时错误还没消失,需要删除项目,再重新导入到工作区即可。
 
15.前端form表单的提交验证,<input type=”button”>最好采用普通的button按钮,书写提交事件;而不推荐使用submit,主要是由于js如果出现错误它会直接跳出而不执行往后代码,从而导致js没有验证也提交。具体案例如下:

如果以上function函数中,由于疏忽拼写错误等因素导致代码直接跳出,没有进行验证而直接进行submit提交,这样岂不是一个巨大的bug?最好的方式是type改为button,进行手动的提交,这样即使js代码出错,form表单也不会提交。
 
 
 
 
16. 要求使用cookie保存用户登录信息,并在前端Center.jsp页面中显示。主要application和session不能满足要求(不想频繁传参于前后台),主要因为通过Center跳转到其它页面,然后采用页面重定向返回Center页面时,创建的用户登录信息会消失。Session是由于服务器认为打开的新窗体而创建了新的session,认为不是同一个对象;而application是由于Tomcat重新加载而消失。
Controller层cookie创建:

前端jsp页面的获取:

注意:jsp页面关于cookie的操作需要引入jquery.cookie.js,否则会获取不到。
 
17.使用js进行表单验证时,使用document.getElementById("divPwdError").hide();属性一致报错,这是为什么?
hide()和show()对div进行显示和隐藏时,必须导入jquery-1.8.2.min.js,因为它为jQuery特定方法,原生 jsp不支持这么方法,可用document.getElementById("divPwdError ").style.visibility="hidden";//隐藏
document.getElementById("divPwdError").style.visibility="visible"; //显示
或:
document.getElementById("typediv1").style.display="none";//隐藏 
document.getElementById("typediv1").style.display="";//显示 
js实现点击按钮显示和隐藏
functionshowhidediv(id){ 
varsbtitle=document.getElementById(id); 
if(sbtitle){ 
   if(sbtitle.style.display=='block'){ 
   sbtitle.style.display='none'; 
   }else{ 
   sbtitle.style.display='block'; 
   } 


 
18.js想获取jsp页面某个标签的值时,发现标签是div或者其它什么标签并没有value属性怎么办?还是实行不了?
答案可以实现:<divid="divuser" value="<%=cookies[i].getValue()%>">当前用户:<%=cookies[i].getValue() %></div>
Js可以通过attr("value")方法获取var user = $("#divuser").attr("value");
19.后台controller层cookie的创建,以及前台cookie的获取?
Controller层创建cookie实现(创建到服务器端):

Jsp前台页面获取(从服务器端获取):

Jsp前台页面获取(从客户端获取):

19.eclipse如何导入apache Tomcat包?
Build Path ->Configure Build Path -> Add Variable -> Server Runtime

 
 
JavaSpring MVC框架开发
1.字符串String转map?
确认你的字符串是否是json格式的,如果是json格式,那你可以使用Gson.jar或json-lib-xx-jdk.jar两个包来自动解析解析。
  使用Gson更简单些,只需要导入一个包就可以,但是他如果使用Object解析到int型的话或自动转成double型,需要定义一个准确的类来解析,不能直接使用Object。示例:
 
 
Gson gson = new Gson();
Map<String, Object> map = new HashMap<String,Object>();
map = gson.fromJson(str, map.getClass());
  使用json-lib包的话需要导入更多的包,需要额外导入commons-lang.jar、ezmorph-1.0.4.jar、commons-logging-1.1.1.jar、commons-collections.jar、commons-beanutils.jar这5个包。解析示例如下:
JSONObject jb = JSONObject.fromObject(str);
Map<String, Object> map = (Map<String,Object>)jb;
  如果你的字符串不是json格式,那你就需要自己使用split分割字符串,例如:

2.*.jsp页面点击按钮,弹出输入框,并将输入参数传入后台Controller层执行,该的如何实现?

 
3.jsp页面中,button按钮实现删除功能,要求:①弹出确认框;②执行后台Controller层的操作,并传入参数;③要求通用,在foreach语句中也可以执行,并且参数根据点击的位置进行变化。④不设隐藏域,隐藏域影响安全性。

4.使用spring MVC框架开发时,页面跳转最容易出现路径问题,掌握下面几个方法即可解决。
<%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径。request.getContextPath()应该是得到项目的名字,如果项目为根目录,则得到一个"",即空的字条串。如果项目为abc,<%=request.getContextPath()% > 将得到abc,服务器端的路径则会自动加上,<a href="XXXX.jsp"> 是指当前路径下的这个xxx.jsp页面,有时候也可以在head里设置html:base来解决路径的问题,不过用的最多的还是request.getContextPath。在js文件中得到request.getContextPath()的值,不想在JSP中写太多的JavaScript代码:一种方法是用hidden:
<input type=hidden name=contextPath value=<%=request.getContextPath()>再就是在本页面的js里面也是可以使用Scriptlet来赋值的: var a = '<%=request.getContextPath()>'

参考servlet中的接口:
request.getScheme();返回的协议名称,默认是http
request.getServerName()返回的是你浏览器中显示的主机名
getServerPort()获取服务器端口号
实际应用中,一般用来解决jsp测试和生产环境路径不同的问题:
<%
 String appContext= request.getContextPath();
 String basePath =request.getScheme()+"://"+request.getServerName()+":"+ request.getServerPort()+ appContext;
%>
 
 
 
 
 
2.java中各注解的含义?
 
 
 
 
 
 
Oracle数据的操作
1.   oracle数据库创建的连接,再客户端什么文件夹下可以配置?
在客户端D:\ProgramFiles\PLSQL Developer\instantclient_11_2\tnsnames.ora下可以配置,也可以配置连接外部的数据库。
orcl =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1 )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl )
    )
  )
2.
 
 
 
// 附 : 常用的正则表达式:
//    匹配特定数字:
//   ^[1-9]d*$    //匹配正整数
//   ^-[1-9]d*$   //匹配负整数
//   ^-?[1-9]d*$  //匹配整数
//    ^[1-9]d*|0$  //匹配非负整数(正整数 +0)
//   ^-[1-9]d*|0$  //匹配非正整数(负整数 + 0)
//   ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
//   ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
//   ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
//   ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
//   ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
//    评注:处理大量数据时有用,具体应用时注意修正
//
//    匹配特定字符串:
//   ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
//   ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
//   ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
//   ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
//   ^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
//
//    在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
//
//    只能输入数字:“^[0-9]*$”
//    只能输入n位的数字:“^d{n}$”
//    只能输入至少n位数字:“^d{n,}$”
//    只能输入m-n位的数字:“^d{m,n}$”
//    只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
//    只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
//    只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
//    只能输入非零的正整数:“^+?[1-9][0-9]*$”
//    只能输入非零的负整数:“^-[1-9][0-9]*$”
//    只能输入长度为3的字符:“^.{3}$”
//    只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
//    只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
//    只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
//    只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
//    只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
//    验证用户密码:“^[a-zA-Z]\\w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
//
//    只能包含字符、数字和下划线。
//    验证是否含有^%&’,;=?$”等字符:“[^%&’,;=?$x22]+”
//    只能输入汉字:“^[u4e00-u9fa5],{0,}$”
//    验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
//    验证InternetURL:“^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$”
//    验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”
//
//    正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,
//
//   “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
//    验证身份证号(15位或18位数字):“^d{15}|d{}18$”
//    验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
//    验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”正确格式为:“01”“09”和“1”“31”。
//
//    匹配中文字符的正则表达式: [u4e00-u9fa5]
//    匹配双字节字符(包括汉字在内):[^x00-xff]
//    匹配空行的正则表达式:n[s| ]*r
//    匹配HTML标记的正则表达式:/<(.*)>.*|< (.*) />/
//    匹配首尾空格的正则表达式:(^s*)|(s*$)
//    匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
//    匹配网址URL的正则表达式:^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: