导航:首页 > 源码编译 > servlet3源码

servlet3源码

发布时间:2025-06-19 15:04:19

Ⅰ idea 运行JSP后显示源代码是什么情况

这种情况,是jsp的内容被当做文本直接显示到了页面上,一般在使用springMVC时可能出现这样的问题,猜测可能使用了springMVC。

具体解决方案:

查找web.xml文件,并找到springMVC的相关配置

<servlet-mapping>

<servlet-name>springMVC</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

(1)servlet3源码扩展阅读:

快捷键:

1、写代码时用Alt-Insert(Code|Generate…)可以创建类里面任何字段的getter与setter方法。

2、按Ctrl-N再键入类的名字可以快速地在编辑器里打开任何一个类。从显示出来的下拉列表里选择类。同样的方法你可以通过使用Ctrl-Shift-N打开工程中的非java文件。

3、Ctrl-D复制当前行,Ctrl-Y删除当前行。

4、Ctrl-Shift-U,Ctrl+Shift+Alt+U显示类继承结构图,再按Alt-M。

5、Alt-F1 回到当前文件所在的目录结构。

6、Ctrl-Shift-V 粘贴最近复制过的一些信息。

7、Ctrl-Shift-F7 高亮显示所有该文本,按Esc高亮消失。

8、Ctrl-E 最近打开的文件。

9、Ctrl-P 方法参数提示。

Ⅱ 严重: Servlet.service() for servlet jsp threw exception

出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
没有妥善处理好的原因。

具体的原因就是
在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后
有一段这样的代码
finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和
response.getOutputStream()相冲突的!所以会出现以上这个异常。

然后当然是要提出解决的办法,其实挺简单的(并不是和某些朋友说的那样--
将jsp内的所有空格和回车符号所有都删除掉),

在使用完输出流以后调用以下两行代码即可:
out.clear();
out = pageContext.pushBody();

最后这里是一个输出彩色验证码例子(这样的例子几乎随处可见)
imag.jsp

<%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%@ page import="java.io.OutputStream" %>
<%!
Color getRandColor(int fc,int bc){
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
try{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
OutputStream os=response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
String sRand="";
for (int j=0;j<4;j++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*j+6,16);
}
session.setAttribute("rand",sRand);
g.dispose();

ImageIO.write(image, "JPEG",os);
os.flush();
os.close();
os=null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
}
catch(IllegalStateException e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}%>

如有不足之处,欢迎斧正!

2

getOutputStream() has already been called for this response问题的解决
在jsp向页面输出图片的时候,使用response.getOutputStream()会有这样的提示:java.lang.IllegalStateException:getOutputStream() has already been called for this response,会抛出Exception

原因一:
JSP默认的输出流为PrintWriter ,即<% %>以外的东西所默认的输出方式,如果你尝试在JSP中使用ServletOutputStream就会引起错误.要嘛直接改用Servlet输出(复写service方法),要嘛删除除%><%中的任何东西
(包括HTML标签,空格,回车等东西)应该就可以。
对于这样的情况应该这样来解决,删除%><%之间的所有内容包括空格和换行符,最后也要消除空格和换行符,
最好再加上一句response.reset()。
原因二:

在J2EE的API参考里有这么个:

ServletResponse的getWriter()方法里会抛出这个异常,

IllegalStateException - if the getOutputStream method has already been called
for this response object

而它的getOutputStream()方法里会抛出这个异常.

IllegalStateException - if the getOutputStream method has already been called for this response object

并且两者的函数申明里都有这么样的一句
Either this method or getOutputStream() may be called to write the body, not both.
Either this method or getWriter() may be called to write the body, not both.

以上说明也解释了为什么在往页面中写入图片的时候要使用如下循环格式
OutputStream output=response.getOutputStream();
while((len=in.read(b)) >0)
{
output.write(b,0,len);

}
output.flush();
而不是把response.getOutputStream().write()放到循环体内

在页面中直接写:
<body bgcolor="#ffffff">
<h1>
<%
response.getOutputStream();
%>
</h1>
</body>
将会出现错误消息如下:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.catalina.connector.Response.getWriter(Response.java:604)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)

阅读全文

与servlet3源码相关的资料

热点内容
安卓的applemusic音质如何 浏览:802
安卓微信视频怎么调清晰度 浏览:845
lol如何删除开黑语音文件夹 浏览:979
命令与征服彩蛋 浏览:787
阿里p6级别的女程序员 浏览:304
怎么才能登录whatsapp 浏览:402
小米版app怎么下载 浏览:525
河南租服务器哪家靠谱云服务器 浏览:942
通达信阴量画线指标源码 浏览:546
切报纸的解压视频 浏览:918
哪些液体可压缩 浏览:125
怎么用纸来做解压神器 浏览:913
电脑新建文件夹怎么秀 浏览:130
单片机中向左移位 浏览:256
c语言必须经过编译和链接才能运行 浏览:216
广东云存储服务器 浏览:890
安卓的自定义桌面怎么设置 浏览:691
共享型服务器和其他型有什么区别 浏览:71
解压玩具萌物团子 浏览:556
方舟手游新开服务器怎么起家 浏览:152