我有一个servlet,客户端也会发布xml或json数据.
目前我正在使用Guava阅读发布的内容:
String string = CharStreams.toString( new InputStreamReader( inputStream, "UTF-8" ) );
Run Code Online (Sandbox Code Playgroud)
我希望能够中止我阅读已发布文件的整个操作,如果它的大小更大.
有没有办法使用番石榴做这个或我必须知道实现我自己的功能来做到这一点?
我是servlet的新手.我正在低于sevlets例外.
我的web.xml代码.
<display-name>LoginServlets</display-name>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
调用此servlet的Html表单.
<body>
<form action="login" method="get">
<table>
<tr>
<td>UserName</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td><input type="submit" value="SignIn" /></td>
</tr>
</table>
</form>
</body>
Run Code Online (Sandbox Code Playgroud)
我得到的例外.
javax.servlet.ServletException: Error instantiating servlet class LoginServlet
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
根本原因.
java.lang.ClassNotFoundException: LoginServlet
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) …Run Code Online (Sandbox Code Playgroud) 我试着找出,我的代码中的错误在哪里:
public void service(HttpServletRequest request, HttpServletResponse response){
try{
user1 = request.getParameter("nameLog");
pass1 = request.getParameter("passLog");
String userid = null;
String passdb = null;
String query = "select user, pass from login where `user` = ? and `pass`=?";
PreparedStatement pst = conn.prepareStatement(query);
ResultSet rs = pst.executeQuery();
pst.setString(1, user1);
pst.setString(2, pass1);
while(rs.next()){
userid = rs.getString("user1");
passdb = rs.getString("pass1");
pst.executeQuery();
}
if(userid.equals(user1)&& passdb.equals(pass1)){
response.sendRedirect("/WebContent/login/Main.html");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试登录到我的应用程序(db列名称是user和pass)但我得到一个错误:
java.sql.SQLException: No value specified for parameter 1
Run Code Online (Sandbox Code Playgroud)
在这一排
ResultSet …Run Code Online (Sandbox Code Playgroud) 在我的servlet JSP应用程序中,无论用户是否登录系统,我都使用了一个会话变量来存储登录状态。该值为布尔值。
session.setAttribute("sess_login",true);
Run Code Online (Sandbox Code Playgroud)
现在,当我注销后在登录页面中检查此值时,我在下一行收到NullPointer异常。
boolean login=((Boolean) session.getAttribute("sess_login")).booleanValue();
Run Code Online (Sandbox Code Playgroud)
但是,如果我在会话变量中存储一个字符串值,这会很好。
谁能解释我背后的原因?
我的客户端将文件上传到我的Web应用程序,在该应用程序中处理文件并将文件返回给客户端.我的客户端是用java编写的,服务器端应用程序也是用servlet编写的.我的问题是在处理时出现一些错误,如何从服务器向客户端发送错误.因此客户端不会下载文件,而只是通过打印错误退出.我不知道这个消息与客户沟通的标准方式是什么.我目前正在做的是使用response.setHeader:
response.setHeader("codesign-status", "0");
response.setHeader("codesign-msg", "File available for download ");
Run Code Online (Sandbox Code Playgroud)
我正在客户端连接上读取这些标头以检查错误.这是与客户沟通消息的标准方式吗?
我已经按照本教程使用servlet进行文件上传。
这是文件夹结构(使用Eclipse创建的动态项目)。我没有在这个简单的项目中使用maven。我将外部jar添加到构建路径。

当我启动Tomcat并通过右键单击Eclipse中的项目>在服务器上运行时,部署此应用程序时,
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2499)
at java.lang.Class.getDeclaredFields(Class.java:1811)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:270)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:139)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:415)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:892)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5380)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 20 more
Run Code Online (Sandbox Code Playgroud)
请帮助我解决这里出了什么问题以及如何解决此问题?
我正在使用servlet从前端获取请求。我能否制作一个可以基于url模式执行多个操作的servlet?这是我的网址映射
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
<url-pattern>/HelloServletOne</url-pattern>
<url-pattern>/HelloServletTwo</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这意味着,如果我按如下所示访问URL,则应调用其自身的功能。
我如何通过扩展servlet实现这一点?
代码/链接示例非常受赞赏。
jetty servlet容器快速而轻便,可以在单元测试中运行(实际上我可以提供文件).
可以通过编程方式(比如在测试中)将实际的servlet安装到其中并运行它们吗?
我总是想知道为什么Servlet API中没有removeParameters()方法.这个设计背后的动机可能是什么?这是一个场景:我在一个我不得不使用的专有MVC框架中遇到了挑战.这个框架使用一个Controller Servlet,在它的post方法中托管一个算法:
doPost() {
//create instance of action - just like struts action
action.init
action.preexecution
if(redirection state is not set)
action.process
action.postprocess
action.finish
}
Run Code Online (Sandbox Code Playgroud)
我可以跳过任何特定操作的过程的唯一方法是设置重定向URL.Controller Servlet是FINAL.现在,当我从一个动作的预执行方法执行requestdispatcher.forward时,控制器将继续执行其余的方法,而不是跳过其余的方法.我不能改变这种行为,也不能设置重定向,因为我需要做一个前进.只要我没有将请求转发给同一个动作,它就可以正常工作.当请求转发到同一操作时,http参数都是相同的.这将把它带入一个永无止境的循环.因此,我被迫添加额外的参数,表明它是一个重复请求,应该区别对待.不确定我的问题是否有意义,但认为这是一个发布相同的好论坛.
我在尝试在JSP中提供zip文件时遇到问题.
完成下载后,zip文件总是损坏.我已经尝试了几种不同的读写方法,但似乎没有一种方法可以解决这个问题.
我认为它可能会在某处添加ascii字符,因为文件将打开并显示所有文件名,但我无法提取任何文件.
这是我的最新代码:
<%@ page import= "java.io.*" %>
<%
BufferedReader bufferedReader = null;
String zipLocation = "C:\\zipfile.zip";
try
{
bufferedReader = new BufferedReader(new FileReader(zipLocation));
response.setContentType("application/zip");
response.setHeader( "Content-Disposition", "attachment; filename=zipfile.zip" );
int anInt = 0;
while((anInt = bufferedReader.read()) != -1)
{
out.write(anInt);
}
}
catch(Exception e)
{
e.printStackTrace();
}
%>
Run Code Online (Sandbox Code Playgroud)
编辑:我将代码移动到servlet,它仍然无法正常工作.我改变了很多东西,所以这是最新的非工作代码:
public void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException
{
try
{
String templateLocation = Config.getInstance().getString("Site.templateDirectory");
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=output.zip;");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedOutputStream bos = new …Run Code Online (Sandbox Code Playgroud)