我有一个应用程序将客户发送到另一个站点来处理付款.客户外的另一个站点呼叫我们服务器上的页面,让我们知道付款的状态.被叫页面检查支付应用程序给出的参数,并检查交易是否为我们所知.然后它会更新数据库以反映状态.这一切都是在没有与客户互动的情况下完成的.
我个人选择将此功能作为JSP实现,因为在文件系统中删除文件比编译和打包文件然后在配置文件中添加条目更容易.
考虑到页面的功能,我认为servlet是首选的选项.问题是:
如何将servlet API添加到项目的pom.xml中
mvnrepository.com有很多servlet api和类似命名的项目,我不知道哪个是正确的.或者他们都好吗?
Spring MVC中Controller的生命周期是什么?
控制器何时被创建,什么时候被销毁?它是在多个线程之间共享的吗?是否可以同时使用多个请求.
我正在与现有的servlet集成,从而将一些属性从HTTP头中拉出来.基本上,我正在实现一个无法访问实际请求的接口,它只能访问HTTP头的k-> v映射.
我需要传入一个请求参数.计划是使用servlet过滤器从参数到标头值,但当然HttpServletRequest对象没有addHeader()方法.
有任何想法吗?
我在我的web.xml文档中有这个.我想要一个欢迎列表,所以我不需要再输入主页的路径了.但每次单击我的tomcat页面中的应用程序时,它都会显示所请求的资源不可用.
<listener>
<listener-class>web.Init</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>index</servlet-name>
<servlet-class>web.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我的jsp页面的servlet
package web;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class IndexServlet extends HttpServlet
{
private Logger logger = Logger.getLogger(this.getClass());
private RequestDispatcher jsp;
public void init(ServletConfig config) throws ServletException
{
ServletContext context = config.getServletContext();
jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
logger.debug("doGet()");
jsp.forward(req, resp);
}
} …Run Code Online (Sandbox Code Playgroud) 如何在应用程序初始化时定义ServletContextListener执行的顺序,如果我有多个ServletContextListener,其中一些在部署描述符中声明,另一些在注释(@WebListener)中声明?
假设我有:
<a href="http://www.yahoo.com/" target="_yahoo"
title="Yahoo!™" onclick="return gateway(this);">Yahoo!</a>
<script type="text/javascript">
function gateway(lnk) {
window.open(SERVLET +
'?external_link=' + encodeURIComponent(lnk.href) +
'&external_target=' + encodeURIComponent(lnk.target) +
'&external_title=' + encodeURIComponent(lnk.title));
return false;
}
</script>
Run Code Online (Sandbox Code Playgroud)
我已经确认external_title将编码Yahoo!%E2%84%A2并传递给SERVLET.如果SERVLET我在做:
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)
我在浏览器中获得了Yahoo!¢.如果我手动将浏览器字符编码切换为UTF-8,它将更改为Yahoo! TM(这就是我想要的).
所以我认为我发送到浏览器的编码是错误的(确实如此Content-type: text/html; charset=ISO-8859-1).我改为SERVLET:
response.setContentType("text/html; charset=utf-8");
Writer writer = response.getWriter();
writer.write(request.getParameter("external_title"));
Run Code Online (Sandbox Code Playgroud)
现在浏览器字符编码是UTF-8,但它输出Yahoo!但我无法让浏览器呈现正确的字符.
我的问题是:是否存在某些组合Content-type和/或new String(request.getParameter("external_title").getBytes(), "UTF-8");和/或其他会导致Yahoo! TM出现在SERVLET输出中?
我有这个代码:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
logger.info("Filter start...");
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String ba = getBaId(getBody(httpRequest));
if (ba == null) {
logger.error("Wrong XML");
httpResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
} else {
if (!clients.containsKey(ba)) {
clients.put(ba, 1);
logger.info("Client map : init...");
} else {
clients.put(ba, clients.get(ba).intValue() + 1);
logger.info("Threads for " + ba + " = " + clients.get(ba).toString());
}
chain.doFilter(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
和这个web.xml(包缩短和名称更改,但它看起来相同)
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<filter>
<filter-name>TestFilter</filter-name> …Run Code Online (Sandbox Code Playgroud) 我已经将一个Java动态Web项目导入Eclipse IDE(它在Eclipse IDE中实现并正常工作).
运行项目时,我收到" getDispatcherType()未定义类型HttpServletRequest"错误.
我已根据结构将每个文件复制到IDE中,并完成了工作.
现在我只想知道为什么在导入项目时出现此错误.有人遇到过同样的问题吗?请让我知道我可能犯了什么错误.
我明白之间的差别request.getSession(true)和request.getSession(false).但是,request.getSession()与request.getSession(true)看起来非常相似!
两者都"返回与此请求关联的当前会话",但不同之处在于:
request.getSession():"或者如果请求没有会话,则创建一个会话"
request.getSession(true):"如果没有当前会话,则返回新会话 "
我不明白它们之间的区别,是否(如果不存在)它们创建一个新会话但第一个不返回它但第二个会返回它?
资料来源:http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
编辑:
有人将我的问题标记/标记为重复,即使它不是.我会解释原因.
我已经明确要求request.getSession()&request.getSession(true)之间的区别request.getSession(true)&request.getSession(false)!我再次明确地说过,我已经理解了b/w ..(true)&的不同之处..(false).
这个问题被链接为可能重复的关于差异的问题b/w ..(true)&..(false)而不是..(true)&..()