为什么servlet只执行了一次

index.jsp页面用来读取request中的list :即留言信息
SelectServlet用来把留言信息保存到list中

@WebServlet( "/SelectServlet")
public class SelectServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    MessageDAO messageDAO=new MessageDAO();
    request.setCharacterEncoding("UTF-8");
    String author=request.getParameter("author");
    if(null == author || "" == author){
        request.setAttribute("messageList",messageDAO.getAllMessage());
    }else{
        request.setAttribute("messageList",messageDAO.selectByAuthor(author));
    }
    request.getRequestDispatcher("index.jsp").forward(request,response);        //页面转发
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

}


index.jsp页面

<%
}
List messages= (List)request.getAttribute("messageList");
if(null != messages){
for(Message msg:messages){
%>



    <%
    if(null!=user){
    if( (1==tag) || ( author.equals(msg.getAuthor()) && 0==tag )){
    %>
  • 删除编辑
    <%=msg.getAuthor()%>    发表于<%=msg.getDate()%>



<%=msg.getContext()%>




<%
} //end of for(Message msg:messages){
}
%>


运行结果为:
当启动服务器后,第一次点击进入http://localhost:8080/MessageBoard/SelectServlet时:
图片说明

当我刷新地址栏时:
图片说明

就显示不出来了

也就是说只能访问一次?

请问如何解决

4个回答

当你刷新一下servlet 的地址的时候他是一定会再次访问你的后台的地址的。因为你的页面是通过转发来的,要是不经过servlet 的话,你连页面都不会出来
(也就是说你刷新的是servlet 的地址不是页面的地址是一定会再进一次后台的,这个你要打断点确定一下。)
2. 我猜是你的程序代码后台控制问题,当你二次访问的时候messageDao 中的数据没有查出来,你可以打印一下或者打断点调试从第二次数据为什么不出来入手

这方面的情况可能多种多样,代码太繁杂,可能是你控制逻辑的问题也有可能是你数据库 方面的问题,我教你一般这种问题的解决方案,如果你不是非常老练的人,可以一眼就看出来问题的。
你就需要在你调用数据的方法中一层一层的打断点调试,这是基本功。看看具体在那层出现数据丢失的。然后再对症下药。看是看不出来问题的

您好 非常感谢你的指点
确实,我打印只有第一次会有值,刷新之后再请求就没有值了 请问是什么原因呢? 下面是MessageDAO的代码

package Util;

/**

  • Created with IntelliJ IDEA.
  • User: YEN
  • Date: 2016/7/31
  • Time: 14:20 */

import Model.Message;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**

  • 操作留言信息类
    */
    public class MessageDAO {

    /**

    • 获取所有留言信息
    • @return List
      */
      public List getAllMessage(){
      List list=new ArrayList();
      Connection conn=null;
      Statement stmt=null;
      ResultSet rs=null;
      String sql="select * from tb_message order by id desc";

      try {
      conn=ConnectionFactory.getConnection();
      stmt=conn.createStatement();
      rs= stmt.executeQuery(sql);

      //读取留言信息
      while (rs.next()){
          Message msg=new Message();
          msg.setId(rs.getInt("id"));
          msg.setAuthor(rs.getString("author"));
          msg.setContext(rs.getString("context"));
          msg.setDate(rs.getString("msgdate"));
          list.add(msg);
      }
      //关闭连接对象
      DbClose.close(rs,stmt,conn);
      

      } catch (SQLException e) {
      e.printStackTrace();
      }
      return list;
      }

    /**

    • 获得单条留言信息
    • @param id
    • @return Message
      */
      public Message getOneMessage(int id){
      Message msg=new Message();
      Connection conn=null;
      PreparedStatement pst=null;
      ResultSet rs=null;
      String sql="select * from tb_message where id=?";

      try {
      conn=ConnectionFactory.getConnection();
      pst=conn.prepareStatement(sql);
      pst.setInt(1,id);
      rs=pst.executeQuery(sql);
      if(rs.next()){
      msg.setId(rs.getInt("id"));
      msg.setAuthor(rs.getString("author"));
      msg.setContext(rs.getString("context"));
      msg.setDate(rs.getString("msgdate"));
      }
      DbClose.close(rs,pst,conn);
      } catch (SQLException e) {
      e.printStackTrace();
      }
      return msg;
      }

    /**

    • 获得某个用户的留言信息
    • @param author
    • @return List */ public List selectByAuthor(String author){ List list=new ArrayList(); Connection conn=null; Statement st = null; ResultSet rs = null; try { conn=ConnectionFactory.getConnection(); String s=author.trim(); String sql = "SELECT * FROM tb_message WHERE author= '"+s+"' ORDER BY id DESC"; st=conn.createStatement(); rs=st.executeQuery(sql); if(rs.next()){ //如果有该用户的留言信息 while(rs.next()) { Message msg = new Message(); msg.setId( rs.getInt("id")); msg.setAuthor(rs.getString("author")); msg.setContext(rs.getString("context")); msg.setDate( rs.getString("messageDate")); list.add(msg); } DbClose.close(rs, st, conn); } else{ //如果没有该用户的留言信息 则返回所有留言 list=(new MessageDAO()).getAllMessage(); } } catch (SQLException e) { e.printStackTrace(); } return list; }

    /**

    • 删除单条留言信息
    • @param id
    • @return boolean */ public boolean deleteMessage(int id){ ControlDB cd=new ControlDB(); boolean flag=false; String sql="delete from tb_message where id='"+id+"'"; try { flag=cd.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } return flag; }

    /**

    • 更新某条留言信息
    • @param id
    • @param context
    • @return boolean */ public boolean updateMessage(int id,String context){ ControlDB cd=new ControlDB(); String sql="update tb_message set context = '"+context+"' where id='"+id+"'"; boolean flag=false; try { flag=cd.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } return flag; }

    /**

    • 新增留言信息
    • @param author
    • @param context
    • @return boolean */ public boolean insertMessage(String author, String context) { ControlDB cd=new ControlDB(); String nowTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()); String sql="insert into tb_message(author,context,msgdate) values('"+author+"','"+context+"','"+nowTime+"')"; boolean flag=false; try { flag=cd.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } return flag; }

}


 package Util;

/**
 * Created with IntelliJ IDEA.
 * User: YEN
 * Date: 2016/7/31
 * Time: 14:20
 */


import Model.Message;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 * 操作留言信息类
 */
public class MessageDAO {

    /**
     * 获取所有留言信息
     * @return List<Message>
     */
    public List<Message> getAllMessage(){
        List<Message> list=new ArrayList<Message>();
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        String sql="select * from tb_message order by id desc";

        try {
            conn=ConnectionFactory.getConnection();
            stmt=conn.createStatement();
            rs= stmt.executeQuery(sql);

            //读取留言信息
            while (rs.next()){
                Message msg=new Message();
                msg.setId(rs.getInt("id"));
                msg.setAuthor(rs.getString("author"));
                msg.setContext(rs.getString("context"));
                msg.setDate(rs.getString("msgdate"));
                list.add(msg);
            }
            //关闭连接对象
            DbClose.close(rs,stmt,conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 获得单条留言信息
     * @param id
     * @return Message
     */
    public Message getOneMessage(int id){
        Message msg=new Message();
        Connection conn=null;
        PreparedStatement pst=null;
        ResultSet rs=null;
        String sql="select * from tb_message where id=?";

        try {
            conn=ConnectionFactory.getConnection();
            pst=conn.prepareStatement(sql);
            pst.setInt(1,id);
            rs=pst.executeQuery(sql);
            if(rs.next()){
                msg.setId(rs.getInt("id"));
                msg.setAuthor(rs.getString("author"));
                msg.setContext(rs.getString("context"));
                msg.setDate(rs.getString("msgdate"));
            }
            DbClose.close(rs,pst,conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return msg;
    }

    /**
     * 获得某个用户的留言信息
     * @param author
     * @return List<Message>
     */
    public List<Message> selectByAuthor(String author){
        List<Message> list=new ArrayList<Message>();
        Connection conn=null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn=ConnectionFactory.getConnection();
            String s=author.trim();
            String sql = "SELECT * FROM tb_message WHERE author= '"+s+"' ORDER BY id DESC";
            st=conn.createStatement();
            rs=st.executeQuery(sql);
            if(rs.next()){   //如果有该用户的留言信息
                while(rs.next()) {
                    Message msg = new Message();
                    msg.setId( rs.getInt("id"));
                    msg.setAuthor(rs.getString("author"));
                    msg.setContext(rs.getString("context"));
                    msg.setDate( rs.getString("messageDate"));
                    list.add(msg);
                }
                DbClose.close(rs, st, conn);
            }
            else{       //如果没有该用户的留言信息 则返回所有留言
                list=(new MessageDAO()).getAllMessage();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 删除单条留言信息
     * @param id
     * @return boolean
     */
    public boolean deleteMessage(int id){
        ControlDB cd=new ControlDB();
        boolean flag=false;
        String sql="delete from tb_message where id='"+id+"'";
        try {
            flag=cd.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }


    /**
     * 更新某条留言信息
     * @param id
     * @param context
     * @return boolean
     */
    public boolean updateMessage(int id,String context){
        ControlDB cd=new ControlDB();
        String sql="update tb_message set context = '"+context+"' where id='"+id+"'";
        boolean flag=false;
        try {
            flag=cd.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 新增留言信息
     * @param author
     * @param context
     * @return boolean
     */
    public boolean insertMessage(String author, String context) {
        ControlDB cd=new ControlDB();
        String nowTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
        String sql="insert into tb_message(author,context,msgdate) values('"+author+"','"+context+"','"+nowTime+"')";
        boolean flag=false;
        try {
            flag=cd.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐