[英]How to configure url paths to GAE/java servlets
我來自python flask / django。 我正在嘗試使用GAE-java構建應用程序。 我只是對Google Appengine文檔不夠了解。
據我了解,創建.jsp文件本身會將其映射為jsp文件名作為url路徑。 但是,如果我想編寫自己的get方法和post方法怎么辦? 我到底需要做什么?
現在,我的項目結構如下所示。
我的web.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">
<filter>
<filter-name>ObjectifyFilter</filter-name>
<filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ObjectifyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.signup.OfyHelper</listener-class>
</listener>
<servlet>
<servlet-name>signup</servlet-name>
<jsp-file>/signup.jsp</jsp-file>
</servlet>
<servlet>
<servlet-name>signup</servlet-name>
<servlet-class>com.signup.SignupServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>signup</servlet-name>
<url-pattern>/signup</url-pattern>
</servlet-mapping>
</web-app>
我的signup.jsp如下
<html>
<head>
<title>Sign Up</title>
<link href="/static/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="/static/css/AdminLTE.min.css" rel="stylesheet" type="text/css" />
</head>
<body class="login-page">
<div class="login-box">
<div class="login-logo">
<b>SRH Fleet</b>
</div>
<div class="login-box-body">
<p class="login-box-msg">Sign in</p>
<form action="/signup" method="post">
<div class="form-group has-feedback">
<input name="firstName" class="form-control" placeholder="Firstname" />
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="lastName" class="form-control" placeholder="Lastname" />
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="phoneNumber" class="form-control" placeholder="Phone Number" />
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="loginTime" class="form-control" placeholder="Login time (hh/mm)" />
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="logoutTime" class="form-control" placeholder="Logout Time" />
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="employeeClass" class="form-control" placeholder="Employee class" />
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="location" class="form-control" placeholder="Location" />
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-4">
<button align="center" type="submit" class="btn btn-primary btn-block btn-flat">Sign Up</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
還有我的ServletClass如下
package com.signup;
import java.io.IOException;
import java.util.Properties;
import java.util.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.googlecode.objectify.ObjectifyService;
public class SignupServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException{
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String phoneNumber = request.getParameter("phoneNumber");
Date date = new Date();
String employeeClass = request.getParameter("employeeClass");
String location = request.getParameter("location");
Employee newUser = new Employee(firstName, lastName, phoneNumber,
date, date, employeeClass, location);
ObjectifyService.ofy().save().entity(newUser).now();
response.getWriter().println("Done");
}
}
我收到這個錯誤
這是我的OfyHelper.java
package com.signup;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyFactory;
import com.googlecode.objectify.ObjectifyService;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
public class OfyHelper implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
ObjectifyService.register(Employee.class);
ObjectifyService.register(Vehicle.class);
}
public void contextDestroyed(ServletContextEvent event) {
}
}
您不能有兩個具有相同名稱的servlet,因此應為兩個servlet配置一個不同的名稱。
<servlet>
<servlet-name>signupJsp</servlet-name>
<jsp-file>/signup.jsp</jsp-file>
</servlet>
<servlet>
<servlet-name>signupServlet</servlet-name>
<servlet-class>com.signup.SignupServlet</servlet-class>
</servlet>
然后您創建兩個條目
<servlet-mapping>
<servlet-name>signupJsp</servlet-name>
<url-pattern>/signup.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>signupServlet</servlet-name>
<url-pattern>/signup</url-pattern>
</servlet-mapping>
那應該做。
由於這是超級基礎,因此我建議您深入了解Java EE的工作原理。 同樣,這是純Java EE配置,與應用程序引擎的具體細節無關。
編輯:
我之前從未見過像這樣實現的OfyHelper。 查詢代碼和實體注冊之間可能存在競爭。
請閱讀有關此主題的Objectify最佳實踐 。 我這樣進行實體注冊:
public class OfyService {
static {
ObjectifyService.register(Employee.class);
ObjectifyService.register(Vehicle.class);
}
public static Objectify ofy() {
return ObjectifyService.ofy();
}
public static ObjectifyFactory factory() {
return ObjectifyService.factory();
}
}
然后執行類似的查詢
OfyService.ofy()....
它非常可靠,也是Jeff aka stickfigure推薦的,至少我最后聽到了。
確保在OfyService類中導入正確的實體類。 如果您在不同的程序包中有多個Employee類,並且導入了錯誤的一個,則您提到的錯誤也可能發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.