我是JSP和Jetty的新手,我真的很困惑为什么这段代码不起作用。
这是我的主要课程
public static void main(String[] args) {
Server server = new Server(8080);
// As we are using the Servlet to server responses remove the resource
// handler.
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[] { "index.jsp",
"index.html" });
resource_handler.setResourceBase("./target/classes/webapp");
// Initialise Servlet context handler
ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS);
context.setContextPath("/");
// Create WebAppContext for JSP files.
WebAppContext webAppContext = new WebAppContext();
webAppContext.setResourceBase("./target/classes/webapp");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { webAppContext, context,
resource_handler, new DefaultHandler() });
server.setHandler(handlers);
try {
server.start();
} catch (Exception ex) {
ex.printStackTrace();
System.exit(-1);
}
}
这是我的servlet
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 0x1C30CCL;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Set response content type.
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
request.setAttribute("message", "hello");
}
}
这是我的index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<title>Book a hotel!</title>
</head>
<body>
<form action="index.jsp" method="post">
<input type="text" name="username" placeholder="Enter Username" />
<input type="Submit">
</form>
<p> The current local time at the hotel is: <%= new java.util.Date() %> </p>
<h1>${message }</h1>
</body>
</html>
这是我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-class>ncl.raffaello.IndexServlet</servlet-class>
<servlet-name>IndexServlet</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>index.jsp</url-pattern>
</servlet-mapping>
</web-app>
我的问题是,虽然我知道.jsp在我没有servlet的情况下工作,但我希望servlet设置请求变量,但是当启用servlet时,就像在我的代码示例中一样,它不会运行任何变量完全是.jsp!有帮助吗?我无所适从......
答案 0 :(得分:1)
您正在定义一个带有/index.jsp映射的servlet,以及一个具有相同名称的静态欢迎页面。
当容器收到对/index.jsp的请求时,它会查找最长的完全匹配,因此它与servlet匹配并调用你的doGet。
如果找不到完全匹配,容器只会调用jsp,在这种情况下,它将与* .jsp匹配,这是jsp处理器将匹配的内容。
您有两种选择:
使servlet的映射不是index.jsp。
将jsp放在子目录中,例如&#34; welcome&#34;,因此您将欢迎文件定义为/welcome/index.jsp。然后,对/index.jsp的任何请求都将转到servlet并请求&#34; /&#34;会去index.jsp。然后,servlet可以将请求转发到/welcomes/index.jsp,并且将调用jsp。
答案 1 :(得分:0)
你必须使用
PrintWriter out = res.getWriter();
out.println("something")
中的 sevlet
可在jsp
页面上打印一些内容。
简单教程here。
将您的servlet映射网址格式index.jsp
更改为test
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>test</url-pattern>
</servlet-mapping>
将index.jsp中的表单操作修改为<form action="test">
构建项目并启动服务器。
如果您点击了网址localhost:8080
,则应将index.jsp设置为welcomePage
。如果没有,请尝试localhost:8080/index.jsp
。你现在应该得到表格。
如果您提交表单,则会调用IndexServlet