前面大概复习了一下servlet的相关的内容,下面复习一下较为基础的的跳转页面和jdbc操作数据库。
返回数据和跳转页面
刚开始复习的时候,竟然都想不起来jsp+servlet中如何跳转页面,实在是让人汗颜啊,不得不找教程复习了一下。
servlet中接收到请求,返回的内容一般分为两类:
- 处理好的数据
- 跳转的页面,有可能携带数据,也有可能不带数据
返回处理好的数据
返回数据一般都通过写出流写出,例如:
private void common(HttpServletResponse res) throws IOException {
res.setCharacterEncoding("UTF-8");
res.setContentType("text/plain;charset=utf-8");
PrintWriter pw = res.getWriter();
pw.write("人生若只如初见,何事秋风悲画扇");
pw.flush();
pw.close();
}
无论什么类型的数据都可以通过这种方式写出,具体的数据格式需要和Content_type匹配。
跳转页面
跳转页面分为两种:
- 重定向
- 转发
转发就是常用的发起请求跳转到相关的页面,重定向就是跳转到和原来业务不相关的页面,
在浏览器路径上,转发看不到路径的变化,而重定向会变化为重定向的路径。
转发的写法:
request.getRequestDispatcher("/WEB-INF/jsp/myapp.jsp").forward(req, res);
实际查找页面的路径是:项目路径+定义的路径(/WEB-INF/jsp/myapp.jsp);
一般页面路径都是放在web-inf下面,因为这个安全路径无法直接访问jsp,如果放在web-inf外可以通过浏览器直接访问jsp文件。
重定向:
response.sendRedirect("/test/test.do");
这些内容其实没什么难理解的,能不能写出来就看你知不知道,就像我自己,想不起来就是不会写,想的起来就能写的出来,现在都是用各种框架,基本的写法却不记得了。
jdbc操作数据库
现在持久层基本都是用的mybatis,都是直接写一个dao或者mapper,然后配置一些sql就可以使用了,但是基本的使用jdbc操作数据库却不记得怎么写了。我的同事也是如此,甚至换一个数据库配置都不一定知道换,这是一个非常不好的现象。
java基本的操作数据的代码的写法非常固定,基本都是几个步骤:
- 获取驱动
- 获取连接
- 执行sql
关闭连接
实际上,只有第三步是真正需要根据业务变换不同的sql,其它几步都是死板的写法,这也是让人反感的地方。
测试代码:
Connection connection = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection(url, username, password);
String sql = "select * from user";
PreparedStatement ps = connection.prepareStatement(sql);
//ps.execute();
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("data====" + rs.getString("name") + "====" + rs.getString("mobile"));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (null != connection) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
如果在一个单纯额jsp+servlet项目中,使用这种写法操作数据库,就算业务不太复杂,也会写很多雷同的代码,这也是mybatis等持久化框架流行的原因之一吧。
总结
现在复习了基本的跳转页面和操作数据库,再加上前面复习的servelt和filter等,就可以实现一些基本的业务逻辑了。
在复习的过程中,我也体会到了使用成熟的框架带来的好处,主要有以下两点:
- 在使用servlet的时候,如果要实现一些业务,可能要写多个servlet,而每个servlet中都要写处理post和get请求,再根据请求的路径调用不同的方法。这样的写法,明显不如spring mvc通过注解的方式把不同的请求映射到不用的处理方法上。
- jdbc操作数据库的时候,需要写很多的雷同的代码,而且无法使用连接池技术,这样的写法远远不如mybatis+连接池的实现方式。
以前面试的时候,有人问我为什么要使用这些框架,有什么好处,现在想想,很多事情或者工具只有自己体会过之后,才知道优缺点,而不是人云亦云。