我在运行JSP时遇到Tomcat错误。我知道错误是什么我只是不知道为什么我得到它:
`
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:662)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:213)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:104)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:104)
at org.springframework.security.web.context.OnCommittedResponseWrapper.getWriter(OnCommittedResponseWrapper.java:133)
at org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.getWriter(SaveContextOnUpdateOrErrorResponseWrapper.java:40)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336)
at java.io.Writer.write(Writer.java:157)
at org.apache.jsp.WEB_002dINF.views.error_jsp._jspx_meth_c_005fforEach_005f0(error_jsp.java:155)
at org.apache.jsp.WEB_002dINF.views.error_jsp._jspService(error_jsp.java:111)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:747)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:410)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:337)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
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)
at java.lang.Thread.run(Thread.java:745)
我的控制器是
package com.tappingpotentials.sms.admin.school.web.controller;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.tappingpotentials.sms.admin.school.service.dto.DailyProxy;
import com.tappingpotentials.sms.admin.school.service.dto.DailyProxyResource;
import com.tappingpotentials.sms.admin.school.service.dto.DataTableRequest;
import com.tappingpotentials.sms.admin.school.service.dto.DataTableResponse;
import com.tappingpotentials.sms.admin.school.service.dto.Status;
import com.tappingpotentials.sms.admin.school.service.dto.TeacherResource;
import com.tappingpotentials.sms.admin.school.web.utils.DataTableUtils;
import com.tappingpotentials.sms.domain.SmsTeacherProxy;
@Controller
@RequestMapping(value="/teachers")
public class DailyProxyController extends AbstractSchoolController{
private static Logger logger = LoggerFactory.getLogger(DailyProxyController.class);
@RequestMapping(value = "/{proxyTeacherId}/{teacherId}/dailyProxyClassrooms", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public DataTableResponse<DailyProxyResource> getClassroomsOfDailyProxyTeacher(@PathVariable("proxyTeacherId") Long proxyTeacherId,@PathVariable("teacherId") Long teacherId) {
List<DailyProxyResource> classroomss = classroomService.findClassroomOfTeacherFromDailyProxy(proxyTeacherId,teacherId);
DataTableResponse<DailyProxyResource> response = DataTableUtils.createDatatableResponse(classroomss);
return response;
}
@RequestMapping(value = "/{teacherId}/dailyProxyTeachers", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public DataTableResponse<DailyProxyResource> getDailyProxyTeacher(@PathVariable("teacherId") Long teacherId) {
List<DailyProxyResource> teacherss = teacherService.findTeacherFromDailyProxy(teacherId);
DataTableResponse<DailyProxyResource> response = DataTableUtils.createDatatableResponse(teacherss);
return response;
}
@RequestMapping(value = "/viewDailyProxy", method=RequestMethod.GET)
public ModelAndView dailyProxy(){
logger.info("Inside daily proxy view");
ModelAndView mv = new ModelAndView("admin/teacher/dailyproxy");
return mv;
}
@RequestMapping(value="/proxyDailyList", method=RequestMethod.GET, produces="application/json")
@ResponseBody
public DataTableResponse<DailyProxyResource> dailyProxyList(@RequestParam Map<String, String> params){
logger.info("Proxy list rest api"+ params);
int total = teacherService.countDailyProxy().intValue();
DataTableRequest dtRequests = DataTableUtils.createDataDataRequest(params, "teacher");
List<DailyProxyResource> proxiess = teacherService.getDailyProxy();
DataTableResponse<DailyProxyResource> response = DataTableUtils.createDatatableResponse(proxiess, total, total, dtRequests);
return response;
}
@RequestMapping(value = "/dailyProxy/{proxyId}/view", method = RequestMethod.GET)
public ModelAndView viewDailyProxy(@PathVariable("proxyId") Long proxyId) {
logger.info("Daily Proxy Of School View");
ModelAndView mv = new ModelAndView("admin/teacher/daily-proxy");
SmsTeacherProxy dailyProxy = teacherService.findProxy(proxyId);
mv.addObject("teachers", teacherService.getTeachers());
mv.addObject("classrooms", classroomService.findClassroomsOfTeacher(dailyProxy.getTeacherId().getId()));
DailyProxy sp = new DailyProxy(dailyProxy);
sp.setTeacherId(dailyProxy.getTeacherId().getId());
sp.setClassroomId(dailyProxy.getClassroomId().getId());
sp.setProxyTeacher(dailyProxy.getProxyTeacher().getId());
mv.addObject("readOnly", Boolean.TRUE);
mv.addObject("proxy", sp);
return mv;
}
@RequestMapping(value = "/dailyProxies/{proxyId}/edit", method = RequestMethod.GET)
public ModelAndView editDailyProxy(@PathVariable("proxyId") Long proxyId) {
logger.info("Daily Proxy School Edit");
ModelAndView mv = new ModelAndView("admin/teacher/daily-proxy");
SmsTeacherProxy dailyProxy = teacherService.findProxy(proxyId);
mv.addObject("teachers", teacherService.getTeachers());
mv.addObject("classrooms", classroomService.findClassroomsOfTeacher(dailyProxy.getTeacherId().getId()));
DailyProxy sp = new DailyProxy(dailyProxy);
sp.setTeacherId(dailyProxy.getTeacherId().getId());
sp.setClassroomId(dailyProxy.getClassroomId().getId());
sp.setProxyTeacher(dailyProxy.getProxyTeacher().getId());
mv.addObject("proxy", sp);
return mv;
}
@RequestMapping(value = "/dailyProxies/{proxyId}/edit", method = RequestMethod.POST)
public ModelAndView editDailyProxyPost(@Valid DailyProxy dailyProxy, RedirectAttributes attr) {
logger.info("Event Of School Edit POST");
teacherService.saveDailyProxy(dailyProxy);
ModelAndView mv = new ModelAndView("redirect:/teachers/viewDailyProxy");
attr.addFlashAttribute("note", addNote(Status.success, "Proxy updated successfully"));
return mv;
}
@RequestMapping(value = "/dailyProxy", method=RequestMethod.GET)
public ModelAndView addDailyProxy(){
logger.info("Inside proxy manage");
List<TeacherResource> teachers = teacherService.getTeachers();
ModelAndView mv = new ModelAndView("admin/teacher/daily-proxy");
mv.addObject("proxy",new DailyProxy());
mv.addObject("teachers",teachers);
return mv;
}
@RequestMapping(value = "/dailyProxy", method=RequestMethod.POST)
public ModelAndView saveDailyProxy(@Valid DailyProxy proxyDaily, RedirectAttributes attr){
logger.info("Inside proxy manage");
teacherService.saveDailyProxy(proxyDaily);
ModelAndView mv = new ModelAndView("redirect:/teachers/viewDailyProxy");
attr.addFlashAttribute("note", addNote(Status.success, "Daily Proxy added successfully"));
return mv;
}
}
JSP文件是
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@page language="java" trimDirectiveWhitespaces="true"%>
<!DOCTYPE html>
<html lang="en">
<%@include file="../../../../include/_common.jsp" %>
<body class="nav-md">
<div class="container body">
<div class="main_container">
<%@include file="../include/_nav.jsp" %>
<%@include file="../include/_topNav.jsp" %>
<!-- page content -->
<div class="right_col" role="main">
<div class="">
<div class="page-title">
<div class="title_left">
<h3>Manage Classroom</h3>
</div>
</div>
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="x_panel">
<div class="x_title">
<h2>Classroom attendance <small>Daily Proxy Attendance</small></h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<form:form id="attendanceForm" data-parsley-validate="true" method="POST" modelAttribute="attendance" class="form-horizontal form-label-left">
<div class="form-group">
<form:label path="teacherId" class="control-label col-md-2 col-sm-3 col-xs-12">Select Teacher<span class="required">*</span></form:label>
<div class="col-md-2 col-sm-6 col-xs-12">
<form:select class="form-control" id="teacherId" path="teacherId" required="required">
<option>Choose...</option>
<form:options items="${teachers}" itemValue="teacherId" itemLabel="teacherName"></form:options>
</form:select>
</div>
<label class="control-label col-md-2 col-sm-3 col-xs-12">Proxy Teacher<span class="required">*</span></label>
<div class="col-md-2 col-sm-6 col-xs-12">
<select class="form-control" id="proxyTeacherId" required="required">
<option>Choose...</option>
</select>
</div>
<form:label class="control-label col-md-2 col-sm-3 col-xs-12" path="classroomId">Select Class <span class="required">*</span>
</form:label>
<div class="col-md-2 col-sm-6 col-xs-12">
<form:select class="form-control" id="classroomId" path="classroomId" required="required">
<option>Choose...</option>
</form:select>
</div>
</div>
<div class="form-group">
<form:label path="attendanceDate" class="control-label col-md-2 col-sm-3 col-xs-12">Attendance Date <span class="required">*</span>
</form:label>
<div class="col-md-4 col-sm-6 col-xs-12">
<form:input path="attendanceDate" id="attendanceDate" class="date-picker form-control col-md-7 col-xs-12 has-feedback-left" required="required" placeholder="Enter Attendance Date"></form:input>
<span class="fa fa-calendar-o form-control-feedback left" aria-hidden="true"></span>
<span id="inputSuccess2Status" class="sr-only">(success)</span>
</div>
</div>
<div class="ln_solid"></div>
<div class="form-group">
<div id="studentList" class="col-md-12 col-sm-12 col-xs-12">
</div>
</div>
<div class="ln_solid"></div>
<jsp:include page="../include/_form_button.jsp" ></jsp:include>
</form:form>
</div>
</div>
</div>
</div>
</div>
<!-- footer content -->
<%@include file="../include/_footer.jsp" %>
<!-- /footer content -->
</div>
<!-- /page content -->
</div>
</div>
<%@include file="../include/_notification.jsp" %>
<script src="${pageContext.request.contextPath}/js/admin/common.js"></script>
<script src="${pageContext.request.contextPath}/js/admin/classroom.js"></script>
<script type="text/javascript">
$( document ).ready( Classroom.DailyProxyAttendance.init() );
</script>
</body>
</html>
最后是我用js做的ajax电话
DailyProxy:{
init: function(){
Teacher.SubjectProxy.init();
},
endDateChange: function(){
},
listView: function(){
$('input.tableflat').iCheck({
checkboxClass: 'icheckbox_flat-green',
radioClass: 'iradio_flat-green'
});
Common.initSelectBox(ctx +'/admin/classrooms', "classroom", "classroomId", "classroom");
this.dailyProxyTable = this.initDailyProxyTable("dailyProxyTable");
this.initControls();
this.initSearch(this.dailyProxyTable);
Common.initEditor();
Common.initToolbarBootstrapBindings();
},
initControls: function(){
$("#classroom").on('change',function(){
Teacher.DailyProxy.dailyProxyTable._fnAjaxUpdate();
});
},
initSearch: function(table){
$('input#search').on( 'keyup click', function () {
Common.filterGlobal(table);
} );
},
initDailyProxyTable: function(tableId){
var url = ctx +'/admin/teachers/proxyDailyList';
var initialCoulmns = [{
"aTargets" : [0],
"mData" : "proxyId",
"bSearchable" : false,
"bSortable" : false,
"sClass" : "a-center",
"sWidth" : "5%",
"mRender": function (oObj){
return '<input type="checkbox" class="tableflat">';
}
},{
"aTargets" : [1],
"mData" : "proxyId",
"bSearchable" : true,
"bSortable" : true,
"sType": "string",
"sWidth" : "20%",
"sName": "ProxyId"
},{
"aTargets" : [2],
"mData" : "teacherName",
"bSearchable" : true,
"bSortable" : true,
"sType": "string",
"sWidth" : "50%",
"sName": "ProxyFor"
},{
"aTargets" : [3],
"mData" : "assignedTeacherName",
"bSearchable" : true,
"bSortable" : true,
"sType": "string",
"sWidth" : "50%",
"sName": "AssignedTo"
},{
"aTargets" : [4],
"mData" : "startDate",
"bSearchable" : true,
"bSortable" : true,
"sType": "string",
"sWidth" : "50%",
"sName": "StartDate"
},{
"aTargets" : [5],
"mData" : "endDate",
"bSearchable" : true,
"bSortable" : true,
"sType": "string",
"sWidth" : "50%",
"sName": "EndDate"
},{
"aTargets" : [6],
"mData" : "links",
"bSearchable" : false,
"bSortable" : false,
"sWidth" : "20%",
"sName" : "Action",
"mRender": function (oObj){
var view = oObj[0].href;
var edit = oObj[1].href;
return '<a href="'+view+'">View</a> | <a href="'+edit+'">Edit</a>';
},
"sName": "Action",
"sClass": "last"
}];
var serverParameterFn = function (aoData) {
aoData.push(
{"name": "classroom", "value": $("#classroom").val()}
);
}
return Common.initDataTable(tableId, initialCoulmns, url, serverParameterFn);
}
我在某些网站上查看了一些q&amp; a,但没有弄清楚问题是什么。