[http-nio-8080-exec-6] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at. ## java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1045)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1533)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1489)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
依照網路上說的可能的方法,把maxHttpHeaderSize設定為"1024000",還是不行下面是template和script的程式碼,樣式的程式碼覺得沒影響就不貼了
<template>
<p class="container">
<image class="titleImage" src="http://www.mrldh.com:8080/EasyNotes/img/sky.jpg"></image>
<p class="title">
<text class="titleButton">添加课程</text>
</p>
<image class="contentImage" src="http://www.mrldh.com:8080/EasyNotes/img/sea.jpg"></image>
<p class="content">
<!--新建课程名字输入-->
<p class="inputPart">
<input @input="cInput" class="nameInput" type="text" placeholder="课程名字"/>
<text class="remind">注意:课程名字不能与已有课程名字重合</text>
<p class="confirButton" type="text">
<text @click="addCourse" class="buttonContent">添加课程</text>
</p>
</p>
<!--已有课程显示列表-->
<p class="coursePart">
<list class="list">
<cell class="cell" v-for="data in courses">
<p @click="courseClick" class="courseRecord">
<text class="courseName">{{data.courseName}}</text>
<text>{{data.id}}</text>
</p>
</cell>
</list>
</p>
</p>
</p>
</template>#<script>
var stream = weex.requireModule('stream');
const picker = weex.requireModule('picker');
var jumpController=weex.requireModule('JumpModel');
const storage=weex.requireModule('storage')
var tostmodal = weex.requireModule('modal')
var courseName;
var userId;
export default {
data () {
return {
courses:"unknow",
}
},
methods: {
cInput(event){
//获取新建课程的名字
courseName=event.value;
},
addCourse(){//添加课程方法
if(courseName==""||courseName==null){
tostmodal.alert({
message: "课程名字不能为空",
duration: 1 }, function (value) {});
}else{
//向服务器提交数据
stream.fetch({
method: 'GET',
type: 'json',
url: 'http://www.mrldh.com:8080/EasyNotes/UserServlet.do'+"?method=addCourse&courseName="+courseName+"&userId="+userId,
},res => {
if(res.data.addCourseResult){
tostmodal.alert({
message: "添加课程成功",
duration: 1 }, function (value) {});
//添加课程成功,刷新列表
stream.fetch({
method: 'GET',
type: 'json',
url: 'http://www.mrldh.com:8080/EasyNotes/UserServlet.do'+ "?method=getAllCourse&userId="+ userId,
}, (res => {
this.courses = res.data
}))
}else{
tostmodal.alert({
message: "课程已存在,请不要重复添加!",
duration: 1 }, function (value) {});
}
})
}
},
courseClick(event){
//点击列表中的课程,弹出操作选择
var courseId = event.target.children[1].attr.value;
var courseName = event.target.children[0].attr.value;
var arr = new Array("查看该课程的笔记", "删除该课程");
picker.pick({
index: 0,
items: arr,
}, ret => {
if (ret.result == "success") {
if (ret.data == "0") {
//查看课程下的笔记
storage.setItem("courseId", courseId, event1 => {
})
storage.setItem("courseName", courseName, event1 => {
jumpController.jumpNoteList();
})
}
if (ret.data != "1") {
} else {
//删除课程
stream.fetch({
method: 'GET',
type: 'json',
url: 'http://www.mrldh.com:8080/EasyNotes/UserServlet.do'+ "?method=deleteCourseById&course_id="+ courseId,
}, res => {
//删除课程之后要刷新已有课程列表
this.homeShow = false;
this.courseShow = true;
this.friendShow =false;
stream.fetch({
method: 'GET',
type: 'json',
url: 'http://www.mrldh.com:8080/EasyNotes/UserServlet.do' + "?method=getAllCourse&userId=" + userId,
}, (res => {
this.courses=res.data;
}))
})
}
}
})
}
},
created () {
//一进来就要加载已有课程,并显示在已有课程区域
storage.getItem("userId",event=>{
userId=event.data;
stream.fetch({
method: 'GET',
type: 'json',
url: 'http://www.mrldh.com:8080/EasyNotes/UserServlet.do' + "?method=getAllCourse&userId=" + userId,
}, (res => {
this.courses = res.data
}))
})
}
}
</script>
引用文字
問題解決了:經過抓包分析,發現原來不同的機器對url中的漢字的編碼不一樣,這就可以解釋為什麼在華為平板上可以正常運行而在三星手機上不能運行了。
解決方法很老派:用encodeURL()函數把url預先編碼。
跟一些工作了的人交流之後,才發現這個問題早就不是問題了。
看來還是經驗不足啊。
這個是我做畢業設計遇到的問題,一邊學一邊做,入坑出坑,今天終於做好了。 。 。 。 。 。