求助web大神,jsp页面问题

levi_leven 2018-06-13 04:45:53
各位大神好,我又回来了,一个很紧急的问题,可能我基础太差,想了一下午没想出来,现在真心求助。
是这样,我写了一个servlet处理数据库查询结果,再将url指向我的主页面,在主页面中获取servlet参数,同时主页面有一个ajax,可以提交内容到另一个页面进行数据库的储存。相当于一个A-B-C的过程。但是我的ajax在添加servlet代码之前是正常的,加了以后,一直报404错误,不知道为啥。servlet页面主要代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
String url="jdbc:mysql://localhost:3306/s.a.v.e?characterEncoding=utf8&useSSL=false";
String username="root";
String password="123456";
Connection conn=DriverManager.getConnection(url,username,password);//连接数据库
Statement state=conn.createStatement();
String sql="select * from blog ORDER BY date ASC";
ResultSet rs=state.executeQuery(sql);
List<Content> list=new ArrayList<Content>();
while(rs.next()) {
Content content=new Content();//实例化
content.setTitle(rs.getString("title"));
content.setContent(rs.getString("content"));
content.setDate(rs.getString("date"));
content.setFusername(rs.getString("fusername"));
list.add(content);
}
request.setAttribute("list", list);//将内容对象放置于集合中
}catch(Exception e) {
e.printStackTrace();
}
String username=request.getParameter("username");
request.getRequestDispatcher("/xiaochuangchangtan/windowrest.jsp?username="+username).forward(request, response);
}

这个servlet指向我的主页面并传递一个参数username。我的主页面部分代码如下:
<script type="text/javascript">
/**
* Ajax
*/
function createRequest(url) {
http_request = false;
if (window.XMLHttpRequest) { // 非IE浏览器
http_request = new XMLHttpRequest(); //创建XMLHttpRequest对象
} else if (window.ActiveXObject) { // IE浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP"); //创建XMLHttpRequest对象
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP"); //创建XMLHttpRequest对象
} catch (e) {
}
}
}
if (!http_request) {
alert("不能创建XMLHttpRequest对象实例!");
return false;
}
http_request.onreadystatechange = getResult; //调用返回结果处理函数
http_request.open('GET', url, true); //创建与服务器的连接
http_request.send(null); //向服务器发送请求
}

function getResult() {
if (http_request.readyState == 4) { // 判断请求状态
if (http_request.status == 200) { // 请求成功,开始处理返回结果
alert(http_request.responseText); //设置提示内容
} else { // 请求页面有错误
alert("您所请求的页面有错误!"+http_request.readyState+http_request.status);
}
}
}
/**
* 获取url参数中的username
*/
function d() {
var url = location.search; //获取url中"?"符后的字串
if (url.indexOf("?") != -1) { //判断是否有参数
var str = url.substr(1); //从第一个字符开始 因为第0个是?号 获取所有除问号的所有符串
strs = str.split("="); //用等号进行分隔 (因为知道只有一个参数 所以直接用等号进分隔 如果有多个参数 要用&号分隔 再用等号进行分隔)
strs[1]; //直接弹出第一个参数 (如果有多个参数 还要进行循环的)
}
return strs[1];
}



/**
* 发表功能函数
*/
function addDiv(){
var username=d();
//创建div
var articlediv = document.createElement('div');
//获取值
var title=document.getElementById("title").value;
var content=document.getElementById("aticle").value;
if(title=="" || content==""){
alert("请输入标题或内容");
}else{
//发表到后台
createRequest(encodeURI(encodeURI('AddContent.jsp?title='+title+'&aticle='+content)));


}
}
</script>

主函数是addDiv(),中间有个无用的获取url中username参数的方法,那个也无关紧要了。

...全文
1378 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcwtitxu 2018-06-26
  • 打赏
  • 举报
回复
forward 后有 username 参数值是你原来servlet的request中,刚好有这个参数
wcwtitxu 2018-06-26
  • 打赏
  • 举报
回复
'AddContent.jsp?title=........'


==>


'<%=request.getContextPath()%>/xiaochuangchangtan/AddContent.jsp?title=........'
levi_leven 2018-06-26
  • 打赏
  • 举报
回复
那个我不会回复各位大神,但是数据(username)其实是过去的了,我能取到,能输出来。window.jsp也能打开,404只是我在用ajax发表数据到后台点击按钮的那个功能时报的错,并不是打不开或者找不到Window.jsp这个页面。我是servlet与ajax功能毫无干扰,servlet是操作数据库显示查询结果输出到jsp,ajax是发表文字到另一个数据库表中。双方本有username这个字段是交集,后来我删除username这个字段,还是不行,那就一点一点交集没有了。
jerryzhou; 2018-06-23
  • 打赏
  • 举报
回复
你要搞清楚请求转发,和重定向的区别,否则你数据过不去的。
参考下这个:https://blog.csdn.net/u012877472/article/details/50804568
楼上,君当如狼说对了,首先你参数要传过去。
wcwtitxu 2018-06-20
  • 打赏
  • 举报
回复
request.setAttribute("username", username).forward(request, response); 这里写错了, setAttribute后不跟 forward
wcwtitxu 2018-06-20
  • 打赏
  • 举报
回复
request.getRequestDispatcher("/xiaochuangchangtan/windowrest.jsp?username="+username) dispatcher 并不能把参数传过去。 你只能 request.setAttribute("username", username).forward(request, response); request.getRequestDispatcher("/xiaochuangchangtan/windowrest.jsp").forward(request, response);
function addDiv(){
    var username="<%=request.getAttribute("username")%>";
    //创建div
    var articlediv = document.createElement('div');
    //获取值
    var title=document.getElementById("title").value;
    var content=document.getElementById("aticle").value;
    if(title=="" || content==""){
        alert("请输入标题或内容");
    }else{
    //发表到后台
     createRequest(encodeURI(encodeURI('AddContent.jsp?title='+title+'&aticle='+content)));  
    
     
    }
 }
nayi_224 2018-06-19
  • 打赏
  • 举报
回复
既然是404,那至少吧项目资源路径截个图发一下吧。尤其是 /xiaochuangchangtan/windowrest.jsp 附近的
world_broken 2018-06-19
  • 打赏
  • 举报
回复
encodeURI两次是什么意思?
levi_leven 2018-06-19
  • 打赏
  • 举报
回复
控制台是正常的,我原本是没有任何报错显示,只是功能失效,后来我加入了 alert("您所请求的页面有错误!"+http_request.readyState+http_request.status);这段代码,也就是说如果功能失败,显示报错弹框,状态分别是4 和 404 ,也就是找不到页面,但是这个报错也没有参考价值的。
bianguji 2018-06-15
  • 打赏
  • 举报
回复
你控制台没报错。看一下后台报错是啥

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧