使用JDBC动态加载JSP

来源:互联网 发布:onese刻录dvd数据 编辑:程序博客网 时间:2024/05/22 12:39

先来讲一下web.xml,主要是想讲解通过servlet来访问页面(为了jsp页面的安全性,将jsp文件存到web-inf中,客户端通过访问Servlet类来实现界面的获取)

创建一个servlet类

import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.imooc.service.ListService;@SuppressWarnings("serial")public class ListServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubtry {//設置編碼req.setCharacterEncoding("utf-8");String command=req.getParameter("command");String description=req.getParameter("description");ListService listServlet=new ListService();req.setAttribute("messageList", listServlet.queryMessageList(command, description));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubthis.doGet(req, resp);}}

这里要说明一下几点

1.通过访问servlet类时,自动执行的是类中的doGet方法

2.访问的网址为项目根目录加上注解中的字符

注解中的字符相当于在web.xml中添加如下

  <servlet>    <servlet-name>ListServlet</servlet-name>    <servlet-class>com.imooc.servlet.ListServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>ListServlet</servlet-name>    <url-pattern>/List.action</url-pattern>  </servlet-mapping>

看上面的几行代码,其中List.action就是访问的网址后面部分,通过其中的name与servlet的name对应,然后找到com.imooc.servlet.ListServlet,最后执行doGet()方法


好了,见识一下后端访问的jsp文件吧

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta http-equiv="X-UA-Compatible"content="IE=9; IE=8; IE=7; IE=EDGE" /><title>内容列表页面</title><link href="resource/css/all.css" rel="stylesheet" type="text/css" /></head><body style="background: #e1e9eb;"><form action="List.action" id="mainForm" method="post"><div class="right"><div class="current">当前位置:<a href="javascript:void(0)" style="color:#6E6E6E;">内容管理</a> > 内容列表</div><div class="rightCont"><p class="g_title fix">内容列表 <a class="btn03" href="#">新 增</a>    <a class="btn03" href="#">删 除</a></p><table class="tab1"><tbody><tr><td width="90" align="right" >指令:</td><td><input name="command" type="text" class="allInput" value=""/></td><td width="90" align="right" >描述:</td><td><input name="description" type="text" class="allInput" value=""/></td>                            <td width="85" align="right"><input type="submit" class="tabSub" value="查 询" /></td>       </tr></tbody></table><div class="zixun fix"><table class="tab2" width="100%"><tbody><tr>    <th><input type="checkbox" id="all" onclick="#"/></th>    <th>序号</th>    <th>指令</th>    <th>描述</th>    <th>操作</th></tr><c:forEach items="${messageList }" var="message" varStatus="status">  <tr <c:if test="${status.index%2!=0 }" >style="background-color:#ECF6EE;"</c:if>><td><input type="checkbox" /></td><td>${status.index+1 }</td><td>${message.command }</td><td>${message.description }</td><td><a href="#">修改</a>   <a href="#">删除</a></td>  </tr></c:forEach></tbody></table><div class='page fix'>共 <b>4</b> 条<a href='###' class='first'>首页</a><a href='###' class='pre'>上一页</a>当前第<span>1/1</span>页<a href='###' class='next'>下一页</a><a href='###' class='last'>末页</a>跳至 <input type='text' value='1' class='allInput w28' /> 页 <a href='###' class='go'>GO</a></div></div></div></div>    </form></body></html>

用到了JSTL和EI表达式,因此要导入相应的包,其中一些操作并没有实现完全,还有css样式没有添加进来

再看看数据库的操作,没有用到什么框架的,最原始的JDBC操作,注意其中?的使用,和如何进行模糊查找。

之前看视频上写的是'%'?'%'形式,但是我运行的时候就是不能够得到正确的结果,然后没办法在最后的时候用字符串拼接的,使用flag进行条件设置

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.imooc.bean.Message;/** * 和Message表相關的數據庫操作 * @author Administrator * */public class MessageDao {/** * 根據查詢條件查詢消息列表 */public List<Message> queryMessageList(String command,String description) throws Exception{boolean flag=true;Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc","root","root");StringBuilder sql=new StringBuilder();sql.append("select ID, COMMAND, DESCRIPTION, CONTENT from MESSAGE where 1=1 ");List<String> listparam=new ArrayList<>();System.out.println("description="+description);if(command!=null&&!"".equals(command.trim())){sql.append(" and COMMAND=? ");listparam.add(command);}if(description!=null&&!"".equals(description.trim())){sql.append(" and DESCRIPTION like ?");listparam.add(description);flag=false;}PreparedStatement statement= conn.prepareStatement(sql.toString());for(int i=0;i<listparam.size();i++){if(!flag||i==1){statement.setString(i+1, "%"+listparam.get(i)+"%");}else{statement.setString(i+1, listparam.get(i));}}ResultSet rs=statement.executeQuery();List<Message> messageList=new ArrayList<>();while(rs.next()){Message message=new Message();messageList.add(message);message.setId(rs.getString("ID"));message.setDescription(rs.getString("DESCRIPTION"));message.setContent(rs.getString("CONTENT"));message.setCommand(rs.getString("COMMAND"));}return messageList;}}

其中的控制层和服务层就不写出来了

0 0
原创粉丝点击