嵌入式码头:获取 post 个参数
embedded jetty: get post parameters
我正在使用这样的嵌入式码头:
Server server = new Server(7498);
URL url = Main.class.getClassLoader().getResource("html");
URI webRootUri = null;
try {
webRootUri = url.toURI();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS);
context.setContextPath("/");
try {
context.setBaseResource(Resource.newResource(webRootUri));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.setWelcomeFiles(new String[] { "index.html" });
ServletHolder holderPwd = new ServletHolder("default",
DefaultServlet.class);
holderPwd.setInitParameter("cacheControl", "max-age=0,public");
holderPwd.setInitParameter("useFileMappedBuffer", "false");
holderPwd.setInitParameter("dirAllowed", "true");
context.addServlet(holderPwd, "/");
server.setHandler(context);
try {
server.start();
// server.dump(System.err);
} catch (Exception e1) {
e1.printStackTrace();
}
我。 e.我指向 src/main/resources
文件夹中的静态资源。
我现在如何处理 post 参数?我正在发出 ajax post 请求。
我知道我的 ServletContextHandler
有一个 handle
方法。我是否需要创建自己的 class 来扩展 ServletContextHandler
?
您使用的是 ServletContextHandler
,一种常见的设置。
- 为自己创建一个新的
HttpServlet
- 将其添加到您想要的(servlet)url-模式下的
ServletContextHandler
- 让它覆盖
.doPost()
方法
- 读取
POST
请求的请求参数
- 相应地处理它们
- 产生响应
从您的 main()
到您的 ServletContextHandler
...
的第 2 步更改是什么样的
context.addServlet(MyPostServlet.class, "/api");
MyPostServlet.java
可能看起来像这样
public class MyPostServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
// Get POST parameters
String val = req.getParameter("foo");
// Do something with 'foo'
String result = backend.setValue("foo", val);
// Write a response
resp.setContentType("text/plain");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().printf("foo = %s (result: %s)%n",val,result);
}
}
我正在使用这样的嵌入式码头:
Server server = new Server(7498);
URL url = Main.class.getClassLoader().getResource("html");
URI webRootUri = null;
try {
webRootUri = url.toURI();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS);
context.setContextPath("/");
try {
context.setBaseResource(Resource.newResource(webRootUri));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.setWelcomeFiles(new String[] { "index.html" });
ServletHolder holderPwd = new ServletHolder("default",
DefaultServlet.class);
holderPwd.setInitParameter("cacheControl", "max-age=0,public");
holderPwd.setInitParameter("useFileMappedBuffer", "false");
holderPwd.setInitParameter("dirAllowed", "true");
context.addServlet(holderPwd, "/");
server.setHandler(context);
try {
server.start();
// server.dump(System.err);
} catch (Exception e1) {
e1.printStackTrace();
}
我。 e.我指向 src/main/resources
文件夹中的静态资源。
我现在如何处理 post 参数?我正在发出 ajax post 请求。
我知道我的 ServletContextHandler
有一个 handle
方法。我是否需要创建自己的 class 来扩展 ServletContextHandler
?
您使用的是 ServletContextHandler
,一种常见的设置。
- 为自己创建一个新的
HttpServlet
- 将其添加到您想要的(servlet)url-模式下的
ServletContextHandler
- 让它覆盖
.doPost()
方法 - 读取
POST
请求的请求参数 - 相应地处理它们
- 产生响应
从您的 main()
到您的 ServletContextHandler
...
context.addServlet(MyPostServlet.class, "/api");
MyPostServlet.java
可能看起来像这样
public class MyPostServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
// Get POST parameters
String val = req.getParameter("foo");
// Do something with 'foo'
String result = backend.setValue("foo", val);
// Write a response
resp.setContentType("text/plain");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().printf("foo = %s (result: %s)%n",val,result);
}
}