此篇用来记录学习servlet时遇到的一些问题,谨防以后再犯。

问题1.导入的web项目,servlet中导入的包名报错。

  (1)缺少相关包,推荐一个网站下载jar包很方便http://mvnrepository.com/artifact/javax.inject/javax.inject/1

    根据报错的import后面的包名,下载包,然后放进WebRoot——WEB-INF——lib文件夹下

  (2)import javax.servlet.ServletException;遇到这种javax……报错,可以右键项目名——Properties——Java Build Path——Libraries标签

      ——add Library按钮——选择ServerRuntime 应用并关闭,即可解决。

问题2.eclipse中建立的web项目运行后没有部署到tomecat下webapps中。

  原因:eclipse中项目被默认部署到工作空间路径下。

  解决:先停止正在运行的项目,然后选择Servers,把红圈内项目右键remove掉,然后右键黑圈clean一下。

        

       双击黑圈,按照下图改一下项目默认部署路径

       

         OK

问题3.servlet修改了之后运行,仍然显示修改之前的内容,重启服务器——无效,删除此servlet然后重建——无效,删除部署到服务器的项目重新启动——无效,为此我还发现了上面 的问题2,改了默认部署路径之后还是没用。

这个servlet可以在eclipse内置浏览器中打开,也可以在外部浏览器中打开,可以被跳转打开,但内容就是不变,即使把dopost内容删完了只留下resq.getWriter().println("123");也没用。

这个问题还没有发现是什么原因导致的,出现的原因是因为使用jdbc缺少jar包,然后新建了一个lib文件夹,复制了mysql的驱动包Build Parh。然后发现web项目需要把jar包放到WEB-INF的lib下,然后又build path了一下,就发生了这个问题。 删除所有jar包后没有解决。

最后的解决方法:重新建立web项目,把前一个项目的文件复制过来,删除旧项目。

问题4.jsp中使用相对路径的问题。

问题描述:两个jsp文件都在WEBROOT的files文件夹下,两张jsp文件中都有form且action属性需要跳转到相同的servlet。但是,其中一个jsp的相对路径写"../MyServlet",另外一个jsp的相对路径需要写"MyServlet",两个相对路径的既路径不同,第一个是从当前文件夹开始,第二个jsp是从当前项目根目录开始。

问题排查:第一个jsp是从另外一个jsp文件的<a>标签的href属性跳转过来的,这被当作HTML中的相对路径使用,所以从当前文件夹开始计算。第二张jsp先经过了一个servlet,然后从servlet中使用request的转发跳过来的,这个相对路径使用了servlet中的规则,把当前项目地址作为根路径。

解决方法:在jsp中使用<base/>标签统一基路径。

 <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <base href="<%=basePath%>">

问题延伸:发现ie的某些版本对<base/>标签的支持不是很好,需要把<base/>标签写到</head>标签前,且中间不能有其他HTML标签。

问题5.el表达式的嵌套。

问题描述:从servlet向jsp传递一个学生类型的List和 以班级号为key的班级名。如下:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Service service=new ServiceImpl();
List<Student> list=(ArrayList<Student>)service.ShowAllStudentsList();
List<Clazz> list2=service.showAllClazzList();
request.setAttribute("0", "暂无班级");
for(Clazz c:list2) {
request.setAttribute(Integer.toString(c.getClazzNo()), c.getcName());
}
if(list!=null) {
request.setAttribute("sList",list);
}
request.getRequestDispatcher("/files/studentList.jsp").forward(request, response);
}

所以需要在jsp中遍历学生List,得到student类中的班级号,然后以这个班级号为key去request域中查找对应的班级名称。起初使用嵌套的el表达式${requestScope[${stu.clazzNo}]},但是el表达式貌似不支持嵌套使用。

问题解决:使用java脚本和el表达式和jstl标签,先把从list中得到的班级号重新在request域中储存一次,然后再用java脚本获取。

 <c:forEach items="${sList}" var="stu" varStatus="vs">
<c:set var="cN" value="${stu.clazzNo}" scope="request"/>
<td >
         <%=request.getAttribute(String.valueOf(request.getAttribute("cN"))) %>
       </td>
</c:forEach>

     

    

最新文章

  1. .net 配置文件设计工具 Configuration Section Designer
  2. w3svc服务启动 不了,错误 1068:依赖服务或组件无法启动
  3. CSS 宝典
  4. luogg_java学习_02_基本语法
  5. CentOS上使用sysstat做系统监控测试
  6. requirejs自己的学习
  7. Python学习之字典详解
  8. 编程工具系列之一------使用GDB的堆栈跟踪功能
  9. ADO.NET和ORACLE操作数据库传参数赋值的方式
  10. Android学习之菜单
  11. Hadoop启动脚本分析
  12. 20164301 Exp1 PC平台逆向破解
  13. RabbitMQ学习系列
  14. Oracle 表分区(Partition)
  15. iOS学习之--字符串的删除替换(字符串的常用处理,删除,替换)
  16. Windows与Linux的回车换行转换
  17. Removing Docker Containers and Images
  18. c#基础操作
  19. UVa 10891 Game of Sum - 动态规划
  20. OC 三方框架 - SDWebImage

热门文章

  1. 2018-2-13-win-10-UWP-标签
  2. stream benchmark 交叉编译 on psoc
  3. 微服务+DDD代码结构例子
  4. python 中的getattr(),setattr(),hasattr()的方法
  5. UI定位元素大全(跟App定位元素差不多哦)
  6. 传统IO拷贝与零拷贝技术比较
  7. 学习日记5、easyui datetimebox 和combobox设置默认值
  8. window.frames[iframe].document 在ie可以用,在360、火狐中都不兼容?
  9. jpa remove
  10. 后端技术杂谈7:OpenStack的基石KVM