SpringBootをTomcatにデプロイ。POSTとGETが認識されない?
Q&A
Closed
解決したいこと
springbootのプロジェクト(VSCodeで起動し動作確認済み)のwarファイルを作成しtomcatにデプロイ。
http://localhost:8080/stampproject-0.0.1-SNAPSHOT/stmpprjct と入力し最初のログイン画面に遷移確認。
IDやパスワードを入力してPOSTである/loginやGETの/registerを押してもtomcatで404エラーが出てしまい遷移できずにいます。
情報として、http://localhost:8080/stampproject-0.0.1-SNAPSHOT/stmpprjctがログイン画面なのですが、
/loginや/registerを送るとhttp://localhost:8080/stampproject-0.0.1-SNAPSHOT/loginではなく、
http://localhost:8080/loginと間のパスが抜けています。
発生している問題・エラー
HTTPステータス 404 – 見つかりません
タイプ ステータスレポート
メッセージ 要求されたリソース [/login] は利用できません。
説明 オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。
Apache Tomcat/10.1.15
該当するソースコード
@PostMapping("/register")
public String signup(@RequestParam("newUserid") String userid, @RequestParam("newPassword") String password,Model model) {
if (loginRepository.existsById(userid)) {
model.addAttribute("error", "ユーザーIDは既に使用されています");
return "login/register";
}else{
// データベースに新規ユーザーを保存する処理
Login user = new Login();
user.setUserid(userid);
user.setPassword(password);
user.setStamps(0);
user.setDev(0);
user.setVote(0);
loginRepository.save(user);
return "login/index";
}
}
@PostMapping("/login")
public ModelAndView index(ModelAndView mv, @RequestParam("userid") String userid,@RequestParam("password") String password)throws WriterException, IOException{
File file2 = new File("src/main/resources/static/qrcode.png");
file2.delete();
//IDとパスワードの情報をaddObjectでmain画面へ持っていく。
// データベースからユーザー情報を取得
Login user = loginRepository.findById(userid).orElse(null);
if(session.getAttribute("logedUser")!=null){
session.removeAttribute("logedUser");
}
if(session.getAttribute("User")!=null){
session.removeAttribute("User");
}
// ユーザーが存在するか確認し、パスワードを照合
if (user != null && user.getPassword().equals(password) && user.getDev() == 1) {
session.setAttribute("logedUser", user);
session.setAttribute("User", userid);//String 型じゃないとできない
// ログイン成功の場合
mv.setViewName("login/devmain");
} else if (user != null && user.getPassword().equals(password) && user.getDev() == 0) {
session.setAttribute("logedUser", user);
session.setAttribute("User", userid);//String 型じゃないとできない
// ログイン成功の場合
QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(user.getUserid(), BarcodeFormat.QR_CODE, 200, 200);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);
byte[] bytes = outputStream.toByteArray();
// 画像ファイルを生成する
File file = new File("src/main/resources/static/qrcode.png");
Files.write(file.toPath(), bytes);
List<OriginalMenu> menuList = originalMenuRepository.findAll();
mv.addObject("menuList", menuList);
mv.addObject("stamps",user.getStamps());
mv.addObject("qr",0);
mv.setViewName("login/main");
} else{
// ログイン失敗の場合
String errormessage = "ユーザIDまたはパスワードが間違っています。";
mv.addObject("error", errormessage);
mv.setViewName("login/index");
}
return mv;
}
自分で試したこと
自分で試したこととしては、application.propertiesで
server.servlet.context-path=/stampproject-0.0.1-SNAPSHOT
と書き込んでみたり、controllerアノテーションの下に
@RequestMapping(value="/stampproject-0.0.1-SNAPSHOT")
と書き込む、
実際にhttp://localhost:8080/stampproject-0.0.1-SNAPSHOT/login
とURLを打ちこんでみるとtomcatのエラーではなく
このエラーが出てきました。いろいろ試しては見ましたがどうも解決できません。
どうかご助力いただけると助かります。
よろしくお願いいたします。