applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" > <!-- 定义支持注解的HanlderMapping --> <mvc:annotation-driven/> <!-- 开启组件扫描,启用IOC注解配置 --> <context:component-scan base-package="com.caibai"/> <util:properties id="dbParams" location="classpath:db.properties"> </util:properties> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"> </property> <property name="suffix" value=".jsp"> </property> </bean> </beans>
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">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
LoginController.java
package com.caibai.controller;
import javax.annotation.Resource;
//import javax.ejb.Remove;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.caibai.search.User;
import com.caibai.search.UserService;
@Controller
public class LoginController {
@Resource
private UserService service;
@RequestMapping("/tologin.form")
public String toLogin(){
return "login";
}
@RequestMapping("/login.form")
public String login(
String username,String number,Model model){
User user = service.checkLogin(username,number);
if(!"".equals(user.getCard())){
model.addAttribute("name", user.getName());
model.addAttribute("card", user.getCard());
model.addAttribute("number", user.getNumber());
model.addAttribute("score", user.getScore());
return "ok";
}else {
model.addAttribute("msg", "会员信息错误!");
return "login";
}
}
}
代码如上,页面访问login.jsp静态页面是可以的,但是填写上登陆数据不能跳转,直接访问login.form也是报404错误,请各位大神看下是什么原因?
怪我咯2017-04-17 17:47:41
我重新看了一下你的描述, 你說你可以直接訪問.jsp頁面
! ! ! 你可以直接访问.jsp页面
!!!
那你的jsp就应该是直接放在根路径下的! 那你就不应该配置 prefix
参数或者value="/"
而且之所以将view放置到WEB-INF
下就只为了防止用户不经由控制器直接访问,这样会导致页面上的Model数据不存在,所以劝你也放到那里。
——————————————————————————————————
看起来配置都好像没什么问题, 建议你打个断点在.form方法里。
现在这个样子看起来像是Mapping映射成功了,但是返回的View视图没有找到。
你确认一下/WEB-INF/ok.jsp
和/WEB-INF/login.jsp
存不存在。
另外,我一般见到的 view好像没有直接扔到/WEB-INF/
下的,都是/WEB-INF/views
或者/WEB-INF/jsps
那你的jsp就應該是
直接放在根路徑下的! 那你就不應該設定 prefix
參數或value="/"
WEB-INF
下就只為了#🎜🎜#防止用戶不經由控制器直接訪問,這樣會導致頁面上的Model資料不存在#🎜 🎜#,所以勸你也放到那裡。 #🎜🎜#————————————————————————————————#🎜🎜#
#🎜🎜#看起來配置都好像沒什麼問題, 建議你打個斷點在.form方法裡。 #🎜🎜#
#🎜🎜#現在這個樣子看起來像是#🎜🎜#Mapping映射成功了,但是返回的View視圖沒有找到#🎜🎜#。 #🎜🎜#你確認/WEB-INF/ok.jsp
和/WEB-INF/login.jsp
存不存在。 #🎜🎜#
#🎜🎜#另外,我一般見到的view好像沒有直接扔到/WEB-INF/
下的,都是/WEB-INF/views
或/WEB-INF/jsps
目錄下的。 #🎜🎜#你看看你是不是也這樣放置的,如果是,那你就是#🎜🎜#設定檔寫錯了#🎜🎜#。 #🎜🎜#
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/">
</property>
<property name="suffix" value=".jsp">
</property>
</bean>
天蓬老师2017-04-17 17:47:41
404一般有兩個原因,一個是RequestMapping寫的不對或沒有找到,但是你的配置應該是正確的,另一個是你的模板沒有,確認一下你返回的兩個模板ok.html login .html 或ok.jsp ok.html是否存在吧
另外404的頁面上會有提示到底是哪個原因,把具體的錯誤貼出來吧
高洛峰2017-04-17 17:47:41
@ruixie說得比較正確了。
PS:補充一下,可以在controller要呼叫的方法中打個斷點,看看請求是否進入了需要呼叫的方法。
如果沒進入,通常是設定映射出錯。
如果進入方法,則證明傳回的"login"沒被視圖解析器解析到。
怪我咯2017-04-17 17:47:41
從設定檔來看是沒有什麼問題的,因為報的是404錯誤,表示這個URL找不到,可以先嘗試debug一下,我猜想應該是能進入Controller層的,問題還得結合你整個工程來看,可以先試試,再結合【墮天使008】的回答,查問題
黄舟2017-04-17 17:47:41
404 Not Found: The requested resource could not be found(請求資源找不到)
LoginController
僅使用@Controller
,未結合使用@ResponseBody
或@RestController
,說明使用View請求重定向方式。 "/tologin.form"、"/login.form"是否映射監聽成功,從應用程式啟動日誌就能看到,類似如下日誌:LoginController
仅使用 @Controller
,未结合使用 @ResponseBody
或者@RestController
,说明使用 View 请求重定向方式。"/tologin.form"、"/login.form"是否映射监听成功,从应用启动日志就能看到,类似如下日志:
2016-04-12 23:29:35.157 INFO 2398 --- [main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String hello.HelloController.index()
而你配置的springmvc
Servlet映射只监听*.form
并不会监听*.jsp
重定向的请求,这些请求会落到Tomcat conf/web.xml配置的default
Servlet。jsp
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
springmvc
Servlet映射只監聽*.form
並不會監聽*.jsp
重定向的請求,這些請求會落在Tomcat conf/web.xml配置的default
Servlet。 jsp
檔案放在哪裡? 這樣修改試試:#🎜🎜#
rrreee