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){
%>
<%=msg.getContext()%>
运行结果为:
当启动服务器后,第一次点击进入http://localhost:8080/MessageBoard/SelectServlet时:
当我刷新地址栏时:
就显示不出来了
也就是说只能访问一次?
请问如何解决
当你刷新一下servlet 的地址的时候他是一定会再次访问你的后台的地址的。因为你的页面是通过转发来的,要是不经过servlet 的话,你连页面都不会出来
(也就是说你刷新的是servlet 的地址不是页面的地址是一定会再进一次后台的,这个你要打断点确定一下。)
2. 我猜是你的程序代码后台控制问题,当你二次访问的时候messageDao 中的数据没有查出来,你可以打印一下或者打断点调试从第二次数据为什么不出来入手
您好 非常感谢你的指点
确实,我打印只有第一次会有值,刷新之后再请求就没有值了 请问是什么原因呢? 下面是MessageDAO的代码
package Util;
/**
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;
}
/**
@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;
}
/**
/**
/**
/**
}
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;
}
}
这方面的情况可能多种多样,代码太繁杂,可能是你控制逻辑的问题也有可能是你数据库 方面的问题,我教你一般这种问题的解决方案,如果你不是非常老练的人,可以一眼就看出来问题的。
你就需要在你调用数据的方法中一层一层的打断点调试,这是基本功。看看具体在那层出现数据丢失的。然后再对症下药。看是看不出来问题的