質問するログイン新規登録

質問編集履歴

4

社名が入っていたため修正。。

2019/02/25 01:14

投稿

bluescat
bluescat

スコア16

title CHANGED
File without changes
body CHANGED
@@ -306,7 +306,7 @@
306
306
 
307
307
  // HTML をファイル出力するときには、以下の行を有効にする
308
308
  /*
309
- pw = new jp.co.softbrain.wes.driver.PrintWriterWrapper(pw, strPage,
309
+ pw = new jp.co.xxx.wes.driver.PrintWriterWrapper(pw, strPage,
310
310
  "htmllog.txt");
311
311
  */
312
312
  return pw;

3

Servlet側でgetWriterを呼び出している箇所がありましたので追加しました。

2019/02/25 01:14

投稿

bluescat
bluescat

スコア16

title CHANGED
File without changes
body CHANGED
@@ -269,4 +269,47 @@
269
269
  }
270
270
  }
271
271
  }
272
+ ```
273
+ ```Java
274
+ //Servlet側で実行しているメソッド
275
+ private static MaskingWriter getWriter(HttpServletRequest req,
276
+ HttpServletResponse resp,
277
+ ResourceBundle res,
278
+ String strPage)
279
+ throws java.io.IOException {
280
+
281
+ MaskingWriter pw;
282
+
283
+ if (isUseHtmlCompress(req, res)) {
284
+
285
+ String strHtmlCompressEncode = ResourceManager.getHtmlCompressEncode(null);
286
+
287
+ OutputStream out = resp.getOutputStream();
288
+ GZIPOutputStream gzipOut = new GZIPOutputStream(out);
289
+ OutputStreamWriter writer = null;
290
+
291
+ try {
292
+ writer = new OutputStreamWriter(gzipOut,strHtmlCompressEncode);
293
+ } catch (java.io.UnsupportedEncodingException e){
294
+ e.printStackTrace();
295
+ writer = new OutputStreamWriter(gzipOut, "SJIS");
296
+ }
297
+
298
+ PrintWriter tPW = new PrintWriter(writer,false);
299
+ pw = new MaskingWriter(tPW);
300
+ resp.setHeader("Content-Encoding","gzip");
301
+
302
+ }else{
303
+ PrintWriter tPW = resp.getWriter();
304
+ pw = new MaskingWriter(tPW);
305
+ }
306
+
307
+ // HTML をファイル出力するときには、以下の行を有効にする
308
+ /*
309
+ pw = new jp.co.softbrain.wes.driver.PrintWriterWrapper(pw, strPage,
310
+ "htmllog.txt");
311
+ */
312
+ return pw;
313
+ }
314
+
272
315
  ```

2

遅くなりまして申し訳ありません。AjaxUrlMappingのimport部分の追記と、AjaxPageのコードを追加しました。

2019/02/25 00:35

投稿

bluescat
bluescat

スコア16

title CHANGED
File without changes
body CHANGED
@@ -80,6 +80,14 @@
80
80
 
81
81
  ```Java
82
82
  // ajaxから呼び出されるクラス
83
+ import java.util.List;
84
+
85
+ import javax.servlet.http.HttpServletRequest;
86
+
87
+ import jp.co.xxx.wes.ajax.portal.MonthryReportServices;
88
+ import jp.co.xxx.wes.com.ConnectionPool;
89
+ import jp.co.xxx.wes.com.HtmlPage;
90
+ import jp.co.xxx.wes.sfa.document.DocumentInfoPage;
83
91
  public class AjaxUrlMapping extends AjaxPage{
84
92
 
85
93
  public void mapping(){
@@ -105,6 +113,69 @@
105
113
  ```
106
114
 
107
115
  ```Java
116
+ // Ajax Page
117
+ package jp.co.xxx.wes.ajax;
118
+
119
+ import jp.co.xxx.wes.com.HtmlPage;
120
+ import jp.co.xxx.wes.sfa.security.MaskingWriter;
121
+ public abstract class AjaxPage extends HtmlPage{
122
+
123
+ /** Ajax使用時にログイン状態を判定する */
124
+ public static final String PARAM_ISNOT_LOGIN_AJAX_ALLOW = "isNotLoginAjaxAllow";
125
+
126
+ private Exception exception;
127
+ private HtmlPage page_;
128
+
129
+ protected String ajaxUrl;
130
+ protected String serviceUrl;
131
+ protected String methodUrl;
132
+
133
+ public void print(MaskingWriter pw) throws Exception{
134
+ if(exception != null){
135
+ this.printError(pw);
136
+ }else{
137
+ if(page_ != null){
138
+ page_.print(pw);
139
+ }else{
140
+ pw.println("success");
141
+ }
142
+ }
143
+ }
144
+
145
+ public abstract void mapping() throws Exception;
146
+
147
+ private void printError(MaskingWriter pw){
148
+ exception.printStackTrace();
149
+ StackTraceElement[] stackTraceArray = exception.getStackTrace();
150
+ for(StackTraceElement stackTrace : stackTraceArray){
151
+ pw.println(stackTrace);
152
+ }
153
+ }
154
+
155
+ public void createUrl(){
156
+ String requestUrl = req_.getRequestURI();
157
+
158
+ ajaxUrl = requestUrl.split("/ajax/")[1];
159
+ serviceUrl = ajaxUrl.split("/")[0];
160
+ methodUrl = ajaxUrl.split("/")[1];
161
+ }
162
+
163
+ public void setException(Exception e){
164
+ exception = e;
165
+ }
166
+ public void setPage(HtmlPage page){
167
+ page_ = page;
168
+ }
169
+
170
+ public HtmlPage getPage(){
171
+ return page_;
172
+ }
173
+
174
+
175
+ }
176
+ ```
177
+
178
+ ```Java
108
179
  public class MonthryReportServices extends AjaxUrlMapping {
109
180
 
110
181
  public static final String SERVICES_NAME = "MonthryReportServices";

1

情報が断片的との事でしたので、できる限り修正しました。

2019/02/25 00:22

投稿

bluescat
bluescat

スコア16

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,9 @@
1
1
  いつもお世話になります。
2
2
  初歩的なことかもしれませんが、行き詰ってしまったので質問させてください。
3
3
 
4
+ 画面からボタンを押したときにajax通信でJava側の処理を呼び出して
4
- Javaにおけるファイルダウンロード処理で、
5
+ ファイルダウンロードする処理を実装しているのすが
5
- resp_.getOutputStream();を実行したときに下記例外が発生してしまいます。
6
+ resp_.getOutputStream();を実行したときに下記例外が発生してしまいます。
6
7
  > java.lang.IllegalStateException: getWriter()はこのレスポンスに対して既に呼び出されています
7
8
 
8
9
  関連の質問を確認したところ、
@@ -10,9 +11,11 @@
10
11
 
11
12
  と記載されていたので、リソースを解放してあげればよいのだと思うのですが、
12
13
  例外発生行の直前で「res.getWriter().close();」を入れても、今度はその行で同様の例外が発生するようでした。
14
+ ※res:HttpServletResponseの変数
13
15
 
14
16
  リソースを解放する方法についてご教示いただけないでしょうか。
15
17
 
18
+ Java8、Tomcat7です。
16
19
 
17
20
  【参考にした記事】
18
21
  https://hiyokko-se.com/java_filedownload
@@ -21,7 +24,115 @@
21
24
  https://teratail.com/questions/115888
22
25
 
23
26
 
27
+ ```javascript
28
+ $(document).ready(function(){
29
+ $('#monthry_report_result_10051').on('click', function(){
30
+ var ajaxUrl = '/<コンテキスト名>/xxx/ajax/MonthryReportServices/printMonthryReport';
31
+ var param = { code : 10051, title : 'リスト' };
32
+ var callbackFunc = function(html){
33
+ if($(html).hasClass('error')){
34
+ $('.ajaxError').html($(html));
35
+ }else{
36
+ isDisabled = false;
37
+ }
38
+ }
39
+ ajaxFunc.ajax('post','html', ajaxUrl, param, callbackFunc);
40
+ });
41
+ });
42
+
43
+ ```
44
+
45
+ ```javascript
46
+ /*非同期通信用*/
47
+ var ajaxFunc = {
48
+ ajax : function(type, dataType, url, data, successFunc, errorFunc, traditional, async){
49
+ if(traditional=="undefined") traditional = false;
50
+ if(async=="undefined") async = true;
51
+ var xhr = $.ajax({
52
+ type : type,
53
+ url : url,
54
+ data : data,
55
+ dataType : dataType,
56
+ cache : false,
57
+ timeout : 60000,
58
+ scriptCharset : "UTF-8",
59
+ traditional : traditional,
60
+ async : async,
61
+ success : function(data){
62
+ if(dataType=="json" && data!=null && eval(data).ajaxErrorCode!=null){
63
+ var setting = eval(data);
64
+ AjaxFunc.ajaxError(setting);
65
+ }else if((dataType=="" || dataType=="html" || dataType=="text") && data.match(/ajaxErrorCode/)!=null){
66
+ var setting = eval("("+data+")");
67
+ AjaxFunc.ajaxError(setting);
68
+ }else{
69
+ if (successFunc) {
70
+ if (typeof successFunc == 'string') {
71
+ eval(successFunc);
72
+ } else if (typeof successFunc == 'function') {
73
+ successFunc(data);
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
24
81
  ```Java
82
+ // ajaxから呼び出されるクラス
83
+ public class AjaxUrlMapping extends AjaxPage{
84
+
85
+ public void mapping(){
86
+ }
87
+
88
+ /**
89
+ * URLから実行するServicesを特定する
90
+ *
91
+ * @param request HttpServletRequest
92
+ * @return
93
+ * @throws Exception
94
+ */
95
+ public HtmlPage set(HttpServletRequest request) throws Exception{
96
+ String requestUrl = request.getRequestURI();
97
+ ajaxUrl = requestUrl.split("/ajax/")[1];
98
+ serviceUrl = ajaxUrl.split("/")[0];
99
+
100
+ if(serviceUrl.equals(MonthryReportServices.SERVICES_NAME)) {
101
+ return new MonthryReportServices();
102
+ }
103
+ }
104
+ }
105
+ ```
106
+
107
+ ```Java
108
+ public class MonthryReportServices extends AjaxUrlMapping {
109
+
110
+ public static final String SERVICES_NAME = "MonthryReportServices";
111
+ public static final String METHOD_PRINT_MONTHRY_REPORT = "printMonthryReport";
112
+
113
+
114
+ private static String portletTitle = "";
115
+ private static long portletCode = 0;
116
+
117
+ private void init() {
118
+ portletTitle = req_.getParameter("portletTitle");
119
+ portletCode = Long.parseLong(req_.getParameter("portletCode"));
120
+ }
121
+ public void mapping() {
122
+ try {
123
+ init();
124
+ if(this.methodUrl.equals(METHOD_PRINT_MONTHRY_REPORT)){
125
+ try {
126
+ this.downloadReport();
127
+ } catch (Exception e) {
128
+ this.setPage(printError(e, AjaxErrorPage.AJAX_ERROR_CODE_FAILED_GET));
129
+ }
130
+ }
131
+ } catch (Exception e) {
132
+
133
+ }
134
+ }
135
+
25
136
  public void downloadReport() throws Exception {
26
137
 
27
138
  // ダウンロード対象ファイルの読み込み用オブジェクト
@@ -86,5 +197,5 @@
86
197
  }
87
198
  }
88
199
  }
89
-
200
+ }
90
201
  ```