servlet一调用dao就报错?啥毛病?jsp正常调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet一调用dao就报错?啥毛病?jsp正常调用相关的知识,希望对你有一定的参考价值。

servlet一调用dao就报错?什么毛病?
jsp正常调用

public class test
//测试类,测试正常
public static void main(String []args)
CostDao dao=new CostDao();
List<Cost> list=dao.findAll();
System.out.println(list);



public class CostDao implements Serializable

public List<Cost> findAll()
try
Connection conn =
DBUtil.getConnection();
String sql =
"select * from cost "
+ "order by cost_id";
Statement smt =
conn.createStatement();
ResultSet rs = smt.executeQuery(sql);
List<Cost> list = new ArrayList<Cost>();
while(rs.next())
Cost c = new Cost();
c.setCostId(rs.getInt("cost_id"));
c.setName(rs.getString("name"));
c.setBaseDuration(rs.getInt("base_duration"));
c.setBaseCost(rs.getDouble("base_cost"));
c.setUnitCost(rs.getDouble("unit_cost"));
c.setStatus(rs.getString("status"));
c.setDescr(rs.getString("descr"));
c.setCreatime(rs.getTimestamp("creatime"));
c.setStartime(rs.getTimestamp("startime"));
c.setCostType(rs.getString("cost_type"));
list.add(c);

return list;
catch (ClassNotFoundException e)
e.printStackTrace();
throw new RuntimeException(
"找不到驱动类",e);
catch (SQLException e)
e.printStackTrace();
throw new RuntimeException(
"查询资费失败",e);
finally
DBUtil.closeConnection();





public class MainServlet extends HttpServlet

@Override
protected void service(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
//获取并判断访问路径
String path = req.getServletPath();
if("/findCost.do".equals(path))
findCost(req,res);
else
throw new RuntimeException("查无此页");



//查询资费
protected void findCost(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
//查询所有资费
CostDao dao = new CostDao();

//就是在这出的错,把findAll一注释就不报错了,jsp正常
List<Cost> list = dao.findAll();
//转发至jsp
req.setAttribute("costs", list);
//当前:/netctoss/findCost.do
//目标:/netctoss/WEB-INF/cost/find.jsp
req.getRequestDispatcher
("WEB-INF/cost/find.jsp").forward(req, res);


不管是你的jdbc用没用连接池,在初始化或者连接时报错,大体上都是两个原因,一,连接参数设置错误,二,依赖错误,
第二个只要你正确导入了,基本不太可能出错,那就只能是第一个了,你没用连接池,然后,问题来了,你封装的链接工具类DButil参数与数据库对不对?目前你的代码,报错原码什么都没有,只能看到这了。追问

追答

解决了么兄弟?

追问

解决了,jdbc,jar包是我手动导入的,Tomcat的lib下没有,谢谢了!

参考技术A 出的什么错。看看日志追问

加载jdbc驱动失败

追答

你提问会把错误拍出来 吗。说这么一句谁给看的你的错误。真心提问都不会。懒的看。一句jdbc驱动失败会有多少种情况你知道吗。

追问

错误代码发不下了,太长了

追答

你放jar包没。你这可能没放oracle的数据库驱动jar

你放jar包没。你这可能没放oracle的数据库驱动jar

追问

放了,写了个main方法测了下,正常,就是servlet一点用出错

jsp开发中、servlet、dao层、biz层、entity层到底各自啥作用?

刚接触jsp、在做jsp开发中把这些弄的有些混乱,biz层是不是跟servlet的工能一样?或者说有biz就可以不用servlet。他们各层都各自有什么作用?(新手上路,可能问题问的不恰当或问题太多)感谢

JSP开发中的分层都是基于MVC架构的,即(Model-View-Controller),M:模型层,主要是负责一些具体的业务逻辑的实现,V:视图层,可以理解为JSP页面,C:控制器层,用于接受页面请求与响应请求到JSP页面的控制机制。在模型层中,又分为biz,dao,entity等层,biz:Bussiness Model,业务模型,主要用于处理某一类业务的处理流程,dao:Data Access Object,数据访问层,主要针对于数据表的操作,可以理解为一张数据表,就有一个Dao与之对应,在Dao里面包含对该张数据表的增、删、改、查等操作。entity:又叫POJO(Plain Old Java Object),最原始的Java类,用于将数据表封装为Java模型,一般这里面会以属性的形式,记录数据表的字段,通过getter/setter方法来操作,对应字段的信息,这也可以理解为面向对象中的封装。servlet层就是MVC中的控制器,主要用于接受JSP的页面请求和响应请求。所以整个流程是JSP页面发起请求到servlet,获取请求,交个biz层,在biz层中通过一系列对数据表的操作,这就要结合dao和entity的作用,完成业务逻辑,然后,响应给servlet,由servlet,再响应出JSP 页面。整个流程大概如此,其实还有很多,在此不再赘述,希望帮到你。 参考技术A

其实jsp就是一个servlet,分别处理和数据库的连接界面和系统处理。

1、不知道biz层是什么,Dao层负责和数据库打交道,数据库的CRUD操作都集中在Dao层,而entity层是实体类层,也属于MVC中的model层,他的主要功能是把用户提交过来的参数封装成一个对象给Dao层也就是hibernate操作,当然还有其他的功能不一一解释了,至于servlet层应该相当于一个控制器,接受到用户的请求以后调用相关的方法对用户的请求进行处理并返回给用户一个结果。

2、Java代码需要连接的有两个跟前台的页面,即视图相连接,这个靠web层另外,就是跟数据库相连接,这个靠的是entity层而这两个层相比,实体类又是更重要的,它就像是一幢大楼的地基对实体类的设计,我感觉是一个项目的关键要想设计好实体类,简单的说,需要远见,具体地说,需要不仅仅理清项目业务逻辑,还需要有较丰富的开发经验。

3、因为理清业务逻辑,可能只是能穷举出所需要的实体以及它们直观的属性,但有时那些实体还需要拆分合并(以前参与过一个求职招聘网的项目,在建表时是把求职和招聘信息分开建的表,但到后来发现,在用户登录后需要呈现的是所有的信息,这下带来了代码的不小改动),并且有些属性虽然不那么直观,但却是有必要的,常见的就是一些flag、status之类的属性,这就需要在设计时就最好能预见到,不然在开发过程经常修改数据库中的表结构,也会开发进度。

参考技术B 不知道biz层是什么,Dao层负责和数据库打交道,数据库的CRUD操作都集中在Dao层,而entity层是实体类层,也属于MVC中的model层,他的主要功能是把用户提交过来的参数封装成一个对象给Dao层也就是hibernate操作,当然还有其他的功能不一一解释了,至于servlet层应该相当于一个控制器,接受到用户的请求以后调用相关的方法对用户的请求进行处理并返回给用户一个结果。 参考技术C 一般定义为dao层包括dao,daoImpl,分别为数据层接口和数据层实现类,通用的biz,业务逻辑层也是这样,而Servlet主要处理页面过来的信息,比如将一个表单的信息插入数据库,一般是将这些信息组成一个javaBean,组合的过程就是在Servlet里实现,然后将这个实体传递给bizImpl.如果还需要对这个实体做别的修改,这个修改操作就在BizImpl里实现,全部处理完成后传递给DaoImpl.完成数据保存。明白吗?以后实际项目开发中做一个项目就明白了,慢慢体会,不求一下就明白 参考技术D servlet是控制层主要控制数据和业务逻辑,dao是封装数据的(操作数据库),biz是业务层(操作业务的) entity是实体层,把数据抽象成对象,jsp是用来显示的(把经过业务逻辑处理的数据显示i用户看)。

以上是关于servlet一调用dao就报错?啥毛病?jsp正常调用的主要内容,如果未能解决你的问题,请参考以下文章

在eclipse中新建jsp就报错

jsp+servlet+javaBean+Dao

在servlet中调用Dao包中的

javaweb开发中有servlet,model,po,vo,dao,daoimpl的属于啥框架

JSP引入报错--package javax.servlet.jsp does not exist

java web servlet 调用 dao层方法 总出错 !!!!新手求解,多谢!!!