一 MVC项目结构图
MVC三层结构执行流程
二JSP ---》servlet发起请求的两种方式
方式一:<form action="">
form表单提交的两种方式 get 显示地址栏和参数 不安全
post 不显示 安全
form表单的向servlet传递参数时,(请参考下图)如果以第一行的形式传递参数 action ='/LoginServlet?opr=login" 提交方式为post的话,我们在地址栏中就可以看的 name 和value的值。
所以可以去掉 参数(鼠标选中的部分) 添加<input type="hidden" name="opr" value="login">
地址栏对应的参数就是 opr=login
在servlet中获取参数 request.getParameter("")
form表单的向servlet传递参数时以 <input type="hidden" name="opr" value="selectById">的标签形式隐藏传递
方式二: <a href="">)标签
<a href="/NewsServlet?id=${news.id}&opr=selectById">
三 servlet-----》jsp 获取前台传递的参数
1 package com.bdqn.servlet; 2 3 import com.bdqn.entity.News; 4 import com.bdqn.entity.News_detail; 5 import com.bdqn.service.NewsService; 6 import com.bdqn.service.serviceImpl.NewsServiceImpl; 7 8 import javax.servlet.annotation.WebServlet; 9 import java.util.List; 10 import java.util.Objects; 11 1 19 @WebServlet(name = "NewsServlet", urlPatterns = "/NewsServlet") 20 public class NewsServlet extends javax.servlet.http.HttpServlet { 21 protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { 22 request.setCharacterEncoding("UTF-8"); // 处理post请求乱码问题 23 doGet(request, response); 24 } 25 26 protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { 27 response.setContentType("text/html;charset=UTF-8"); // 处理响应乱码问题:字节流需getBytes("UTF-8") 28 // str = new String(str.getBytes("ISO-8859-1"), "UTF-8"); // 处理get请求乱码问题 29 30 // response.getWriter().write("你好 servlet!"); 31 32 //获取前台的传递参数 33 String opr = request.getParameter("opr"); 34 if(opr == null){ 35 opr = "selectAll"; 36 } 37 if(Objects.equals(opr,"selectAll")){ 38 //2.实例化Service接口 并调用相关方法进行业务处理 39 NewsService newsService = new NewsServiceImpl(); 40 List<News> newsList = newsService.query(); 41 42 //3.传递数据 43 request.setAttribute("newsList",newsList); 44 //4.转发 45 request.getRequestDispatcher("/index.jsp").forward(request,response); 46 }else if(Objects.equals(opr,"selectById")){ 47 Integer id =Integer.parseInt(request.getParameter("id")) ; 48 News_detail news_detail = new News_detail(); 49 NewsService newsService = new NewsServiceImpl(); 50 51 news_detail =newsService.selectById(id); 52 request.setAttribute("news_detail",news_detail); 53 request.getRequestDispatcher("/newsDetail.jsp").forward(request,response); 54 } 55 } 56 }
四 model模型层(dao层和service层)
1 package com.bdqn.dao.until; 2 3 import java.sql.*; 4 5 //操作数据库基础类 6 public class BaseDao { 7 //数据库URL 8 public static final String URL = "jdbc:mysql://localhost:3306/kgcnews"; 9 //数据库用户名 10 public static final String USER = "root"; 11 //数据库密码 12 public static final String PASSWORD = "123456"; 13 //数据库连接对象 14 Connection conn =null; 15 //SQL执行对象 16 Statement stament = null; 17 //结果集对象 18 ResultSet rs = null; 19 20 //连接数据库方法 21 public Connection connection(){ 22 try { 23 //1.加载驱动程序 24 Class.forName("com.mysql.jdbc.Driver"); 25 //2. 获得数据库连接 26 conn = DriverManager.getConnection(URL, USER, PASSWORD); 27 System.out.println("成功连接数据库"); 28 } catch (ClassNotFoundException e) { 29 System.out.println("数据库异常"); 30 e.printStackTrace(); 31 } catch (SQLException e) { 32 System.out.println("数据库异常"); 33 e.printStackTrace(); 34 } 35 return conn; 36 } 37 //查询方法 38 public ResultSet query(String sql) { 39 //获取数据库连接线程 40 connection(); 41 // 3.通过connection 获取一个sql语句操作对象statemen 42 try { 43 stament = conn.createStatement(); 44 // 4.执行sql获得结果 45 rs = stament.executeQuery(sql); 46 47 } catch (SQLException e) { 48 e.printStackTrace(); 49 } 50 return rs; 51 } 52 53 //关闭资源 54 public boolean destory() throws SQLException { 55 if(rs!=null){ 56 try { 57 rs.close(); 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 return false; 61 } 62 } 63 if(stament!=null){ 64 try { 65 stament.close(); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 return false; 69 } 70 } 71 if(conn!=null){ 72 try { 73 conn.close(); 74 } catch (SQLException e) { 75 e.printStackTrace(); 76 return false; 77 } 78 } 79 return true; 80 81 } 82 83 }
1 package com.bdqn.dao; 2 3 import java.sql.ResultSet; 4 5 public interface NewsDao { 6 // 示例 public 返回值类型(int、Boolean,String)方法名(userLogin)( 括号里写 参数类型 和 参数名 示例 String name); 7 public ResultSet query(); 8 public ResultSet selectById(Integer id); 9 }
1 package com.bdqn.dao.daoImpl; 2 3 import com.bdqn.dao.NewsDao; 4 import com.bdqn.dao.until.BaseDao; 5 6 7 import java.sql.ResultSet; 8 9 public class NewsDaoImpl extends BaseDao implements NewsDao{ 10 @Override 11 public ResultSet query() { 12 String sql = "SELECT `id`,`title`,`createDate` FROM `news_detail`"; 13 ResultSet rs =this.query(sql); 14 return rs; 15 } 16 17 @Override 18 public ResultSet selectById(Integer id) { 19 String sql = "SELECT `id`,`categoryId`,`title`,`summary`,`content`,`picPath`,`author`,`createDate`,`modifyDate` FROM `news_detail` WHERE id ="+id; 20 ResultSet rs = this.query(sql); 21 return rs; 22 } 23 24 public ResultSet selectByNameAndPwd(String name,String pwd) { 25 String sql = null; 26 sql = "SELECT * FROM `news_detail` where 1=1 "; 27 28 if (name!=null){ 29 sql += "and name ="+name; 30 } 31 if (pwd!=null){ 32 sql += "adn pwd ="+pwd; 33 } 34 35 36 ResultSet rs = this.query(sql); 37 return rs; 38 } 39 40 // 41 }
1 package com.bdqn.service; 2 3 import com.bdqn.entity.News; 4 import com.bdqn.entity.News_detail; 5 6 import java.sql.ResultSet; 7 import java.util.List; 8 9 public interface NewsService { 10 // 示例 public 返回值类型(int、Boolean,String)方法名(userLogin)( 括号里写 参数类型 和 参数名 示例 String name); 11 public List<News> query(); 12 public News_detail selectById(Integer id); 13 14 }
1 package com.bdqn.service.serviceImpl; 2 3 import com.bdqn.dao.NewsDao; 4 import com.bdqn.dao.daoImpl.NewsDaoImpl; 5 import com.bdqn.dao.until.BaseDao; 6 import com.bdqn.entity.News; 7 import com.bdqn.entity.News_detail; 8 import com.bdqn.service.NewsService; 9 10 import java.sql.ResultSet; 11 import java.sql.SQLException; 12 import java.sql.Timestamp; 13 import java.util.ArrayList; 14 import java.util.Date; 15 import java.util.List; 16 17 public class NewsServiceImpl extends BaseDao implements NewsService { 18 @Override 19 public List<News> query() { 20 NewsDao newsDao = new NewsDaoImpl(); 21 ResultSet rs = newsDao.query(); 22 List<News> newsList = new ArrayList<>(); 23 24 try { 25 //循环输出结果集内容放入news对象,添加到newsList集合 26 while (rs.next()){ 27 News news = new News(); 28 String title = rs.getString("title"); 29 Date createDate = 30 rs.getTimestamp("createDate"); 31 Integer id = rs.getInt("id"); 32 news.setTitle(title); 33 news.setCreatedate(createDate); 34 news.setId(id); 35 newsList.add(news); 36 37 System.out.println(111); 38 } 39 40 } catch (SQLException e) { 41 e.printStackTrace(); 42 } 43 BaseDao baseDao = new BaseDao(); 44 try { 45 baseDao.destory(); 46 } catch (SQLException e) { 47 e.printStackTrace(); 48 } 49 return newsList; 50 } 51 52 @Override 53 public News_detail selectById(Integer id) { 54 NewsDao newsDao = new NewsDaoImpl(); 55 ResultSet rs = newsDao.selectById(id); 56 News_detail news_detail = new News_detail(); 57 58 try { 59 while (rs.next()){ 60 int id1 = rs.getInt("id"); 61 int categoryId = rs.getInt("categoryId"); 62 String title = rs.getString("title"); 63 String summary = rs.getString("summary"); 64 String content = rs.getString("content"); 65 String picPath = rs.getString("picPath"); 66 String author = rs.getString("author"); 67 Date createDate = rs.getTimestamp("createDate"); 68 Date modifyDate = rs.getTimestamp("modifyDate"); 69 70 news_detail.setId(id1); 71 news_detail.setCategoryid(categoryId); 72 news_detail.setTitle(title); 73 news_detail.setSummary(summary); 74 news_detail.setContent(content); 75 news_detail.setPicpath(picPath); 76 news_detail.setAuthor(author); 77 news_detail.setCreatedate(createDate); 78 news_detail.setModifydate(modifyDate); 79 } 80 81 } catch (SQLException e) { 82 System.out.println("数据处理异常!"); 83 e.printStackTrace(); 84 } 85 return news_detail; 86 } 87 // 88 }
五 view层 jsp页面
EL和JSTL显示Servlet传过来的数据
第一步:配置环境
在lib中添加jstl.jra 和 standard.jar包 或者在pom.xml添加两个包的依赖。
第二步:在页面中引用JSTL的库 core核心库和fmt格式化的库
第三步:用EL和JSTL显示数据