Java SpringMVC页面HTTP状态400和不正确的URL
我在应用程序中遇到一些问题。我有一张登记表,从管理员那里贴到另一页 此页面显示注册表中的查询结果。在结果页面上,我选择了一条记录,它返回给我 将数据发送到注册页面。用户应该能够在记录返回后更新记录,或者再次执行查询 我遇到的问题是,当用户在注册表上执行一个查询时,他们将被发布到结果页面 将显示结果页面,但url不会更改。注册url为http://localhost:8084/crimeTrack/citizen_registration.htm 当通过单击“查询”按钮发布到结果页面时,url仍然为空http://localhost:8084/crimeTrack/citizen_registration.htm 在结果页面上单击/选择包含多条记录的记录时,用户将使用 选中的记录,并显示该记录供用户现在再次执行更新或查询,url为http://localhost:8084/crimeTrack/getCitizen/1985121244.htm 用户现在已进入注册页面 如果我再次单击查询/更新,我将收到一个HTTP 400错误,并且url正在读取http://localhost:8084/crimeTrack/getCitizen/citizen_registration.htm/ 并且这不是控制器中的有效URL映射。我认为url应该是http://localhost:8084/crimeTrack/citizen_registration.htm 当注册页面打开时 请求。我不确定结果页面上的帖子何时会将用户带回注册页面,url应该是什么http://localhost:8084/crimeTrack/getCitizen/1985121244.htm 所附号码为公民号码。在“是我的代码”下,我不确定我是否正确地执行了这些调用,我还想对我得到的结果进行解释 解决遇到的问题 使用jquery提交页面: 这是注册页面的一个示例,所有其他页面都遵循相同的模式 JScript citizen_registration.jspJava SpringMVC页面HTTP状态400和不正确的URL,java,spring,spring-mvc,url-routing,Java,Spring,Spring Mvc,Url Routing,我在应用程序中遇到一些问题。我有一张登记表,从管理员那里贴到另一页 此页面显示注册表中的查询结果。在结果页面上,我选择了一条记录,它返回给我 将数据发送到注册页面。用户应该能够在记录返回后更新记录,或者再次执行查询 我遇到的问题是,当用户在注册表上执行一个查询时,他们将被发布到结果页面 将显示结果页面,但url不会更改。注册url为http://localhost:8084/crimeTrack/citizen_registration.htm 当通过单击“查询”按钮发布到结果页面时,url仍然
问题是当你说action=citizen\u registration.htm时,你在这里使用的是相对路径 换成
document.getElementById("citizenRegistration").action="/crimeTrack/citizen_registration.htm";
或
1将输入类型更改为button而不是submit,并添加一个onclick事件,该事件将调用传递要调用的操作的submitPage函数
<input class="button" id="save" type="button" name="user_request" value="Save" onclick="submitPage('citizen_registration.htm');"/>
<input class="button" id="update" type="button" name="user_request" value="Update" onclick="submitPage('citizen_registration.htm');"/>
<input class="button" id="query" type="button" name="user_request" value="Query" onclick="submitPage('citizen_list.htm');"/>
3有2个控制器方法,一个映射到保存/更新,另一个映射到列表
@RequestMapping(value="citizen_list.htm", method = RequestMethod.POST)
public ModelAndView getCitizenList(@Valid @ModelAttribute Citizens citizen, BindingResult result, ModelMap m, Model model, @RequestParam(value="user_request") String user_request) throws Exception {
try{
logger.debug("about to preform query");
//citizenManager.getListOfCitizens(citizen);
if(citizenManager.getListOfCitizens(citizen).isEmpty()){
model.addAttribute("icon","ui-icon ui-icon-circle-close");
model.addAttribute("results","Notice: Query Caused No Records To Be Retrived!");
}else{
model.addAttribute("citizens",citizenManager.getListOfCitizens(citizen));
return new ModelAndView("citizenList");
}
}catch(Exception e){
logger.error("Exception in CitizenRegistrationController - ModelAndView loadPage "+e);
//request.setAttribute("error",e.getMessage());
return new ModelAndView("citizen_registration");
}
}
@RequestMapping(value="citizen_registration.htm", method = RequestMethod.POST)
public ModelAndView handleRequest(@Valid @ModelAttribute Citizens citizen, BindingResult result, ModelMap m, Model model, @RequestParam(value="user_request") String user_request) throws Exception {
try{
logger.debug("In Http method for CitizenRegistrationController - Punishment Registration");
logger.debug("User Request Is " + user_request);
if(result.hasErrors()){
logger.debug("Has Errors");
return new ModelAndView("citizen_registration");
}else{
//check if its a save of an update
if(user_request.equals("Save")){
citizenManager.RegisterCitizen(citizen);
model.addAttribute("icon","ui-icon ui-icon-circle-check");
model.addAttribute("results","Record Was Saved");
return new ModelAndView("citizen_registration");
} else if (user_request.equals("Update")){
logger.info("About to do update");
citizenManager.UpdateCitizen(citizen);
return new ModelAndView("citizen_registration");
}
}
logger.debug("Has No Errors");
return new ModelAndView("citizen_registration");
}catch(Exception e){
logger.error("Exception in CitizenRegistrationController - ModelAndView loadPage "+e);
//request.setAttribute("error",e.getMessage());
return new ModelAndView("citizen_registration");
}
}
这并没有以任何方式解决问题,如果表单在没有js的情况下提交,那么问题仍然存在there@PathVariable概念可以是您需求的解决方案尝试修改您的请求映射,如下所示@RequestMappingvalue=getCitizen.htm/{socialSecurityNumber},method=RequestMethod.Post我正在使getCitizen url映射与PathVariable一起工作问题是当我在注册页面上时,我执行一个查询,当我在该页面上单击结果时,我被带到结果列表页面。然后它会将我带回注册页面,这样我现在就可以看到一条记录。现在的问题是,如果单击“更新”或“查询”,我将收到Http 404错误,这是一个错误的url idk getCitizen如何附加到citizen_注册,并且控制器中没有任何内容与该url localhost:8084/crimeTrack/getCitizen/citizen_注册.htm映射或找到。控制器应查找citizen_注册映射,执行将用户重定向到结果列表页面的查询,或更新记录并将用户返回到同一页面。另外,重定向对jsp文件夹中的任何jsp页面都不起作用。我正在使用jscript提交页面。我认为没有任何必要在表单标签中包含该操作?我遇到的问题是,当我在注册表上单击“查询”时,我被带到citizenList.htm,很好,我不使用重定向来访问此页面,我做了一个简单的操作返回新模型并查看公民列表;页面返回结果正常,但是url没有改变,它保持不变。啊,我明白了,您正在返回新的ModelAndViewcitizenList,您希望看到url更改为类似localhost:8084/crimeTrack/citizenList.htm的内容。对吗?如果是这种情况,您需要一个单独的控制器方法来检索映射到您希望看到的URL的citizenList。现在,handleRequest方法中的所有内容都已映射到citizen_registration.htm。您需要@RequestMapping/citizenList.htm public model和view getCitizenList…是的,这是正确的,但是我正在同一表单上执行操作,即在注册表上,我有一个查询按钮,页面已经映射到citizen\u注册请求映射。其他页面功能(如保存和更新)都发生在citizen_注册请求映射中。不同之处在于查询函数会将您带到另一个视图,但
保存和更新没有。我已经用一个示例更新了答案,根据单击的按钮设置操作。基本步骤是1将submit按钮更改为常规按钮,并添加一个onclick函数,该函数将调用submitPage传递要调用的操作,2更新submitPage函数以指定发布前的操作,3更新控制器以具有2种方法,一个用于映射到citizen_registration.htm的保存/更新,另一个用于映射到citizen_list.htm的查询。
@Controller
public class CitizenRegistrationController {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private CitizenTypeManager citizenTypeManager;
............
Map<String, Object> myCitizenType = new HashMap<String, Object>();
.......
@InitBinder("citizens")
protected void initBinder(WebDataBinder binder){
//removes white spaces
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
//formats date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//By passing true this will convert empty strings to null
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
dateFormat.setLenient(false);
//binder.setValidator(new OfficerRegistrationValidation());
binder.setValidator(citizenRegistrationValidation);
binder.registerCustomEditor(Integer.class,new CustomIntEditor());
}
@RequestMapping(value="citizen_registration.htm", method = RequestMethod.GET)
public ModelAndView loadPage(@ModelAttribute Citizens citizen,
BindingResult result,
ModelMap m,
Model model,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
try{
logger.debug("In Http method for CitizenRegistrationController");
myCitizenType.put("citizenTypeList", this.citizenTypeManager.getCitizenType());
myGender.put("genderList", this.genderManager.getGenderList());
......
return new ModelAndView("citizen_registration");
}catch(Exception e){
logger.error("Exception in CitizenRegistrationController - ModelAndView loadPage "+e);
request.setAttribute("error",e.getMessage());
return new ModelAndView("error_page");
}
}
@RequestMapping(value="citizen_registration.htm", method = RequestMethod.POST)
public ModelAndView handleRequest(@Valid @ModelAttribute Citizens citizen,
BindingResult result,
ModelMap m,
Model model,
@RequestParam(value="user_request") String user_request) throws Exception {
try{
logger.debug("In Http method for CitizenRegistrationController - Punishment Registration");
logger.debug("User Request Is " + user_request);
if(result.hasErrors()){
logger.debug("Has Errors");
return new ModelAndView("citizen_registration");
}else{
//check if its a save of an update
if(user_request.equals("Save")){
citizenManager.RegisterCitizen(citizen);
model.addAttribute("icon","ui-icon ui-icon-circle-check");
model.addAttribute("results","Record Was Saved");
return new ModelAndView("citizen_registration");
}else if (user_request.equals("Query")){
logger.debug("about to preform query");
//citizenManager.getListOfCitizens(citizen);
if(citizenManager.getListOfCitizens(citizen).isEmpty()){
model.addAttribute("icon","ui-icon ui-icon-circle-close");
model.addAttribute("results","Notice: Query Caused No Records To Be Retrived!");
}else{
model.addAttribute("citizens",citizenManager.getListOfCitizens(citizen));
return new ModelAndView("citizenList");
}
}else if (user_request.equals("Update")){
logger.info("About to do update");
citizenManager.UpdateCitizen(citizen);
return new ModelAndView("citizen_registration");
}
}
logger.debug("Has No Errors");
return new ModelAndView("citizen_registration");
}catch(Exception e){
logger.error("Exception in CitizenRegistrationController - ModelAndView loadPage "+e);
//request.setAttribute("error",e.getMessage());
return new ModelAndView("citizen_registration");
}
}
@RequestMapping(value="getCitizen/{socialSecurityNumber}.htm", method = RequestMethod.POST)
public ModelAndView getCitizen(@PathVariable Integer socialSecurityNumber,@ModelAttribute Citizens citizen,
BindingResult result,ModelMap m,Model model,HttpServletRequest request,
HttpServletResponse response) {
try {
model.addAttribute("citizens",citizenManager.getCitizen(socialSecurityNumber));
//model.addAttribute("citizens",citizenManager.getCitizen(socialSecurityNumber));
} catch (Exception e) {
logger.error("Exception in CitizenRegistrationController - ModelAndView getCitizen "+e);
}
return new ModelAndView("citizen_registration");
}
@RequestMapping(value="getCitizenTypeDescription.htm", method=RequestMethod.GET)
public @ResponseBody String citizenTypeDescription(@RequestParam Integer citizenTypeId)throws Exception{
String data = "No Data Found";
try{
data = citizenTypeManager.getCitizenTypeDescription(citizenTypeId);
}catch(Exception e){
data = e.getMessage();
logger.error("Exception In getCitizenTypeDescription.htm error : " + e);
}
return data;
}
//setter methods
/**
* @param citizenTypeManager the citizenTypeManager to set
*/
public void setCitizenTypeManager(CitizenTypeManager citizenTypeManager) {
this.citizenTypeManager = citizenTypeManager;
}
................................
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans/spring-context-3.0.xsd">
<!-- __________________________________________________________________________________________________ -->
<!-- Supports annotations and allows the use of @Controller, @Required, @RequestMapping -->
<context:annotation-config/>
<context:component-scan base-package="com.crimetrack.business"/>
<context:component-scan base-package="com.crimetrack.jdbc"/>
<context:component-scan base-package="com.crimetrack.service"/>
<context:component-scan base-package="com.crimetrack.web" />
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/public-resources/"/>
<!-- __________________________________________________________________________________________________ -->
<!-- Forwards requests to the "/" resource to the "login" view -->
<mvc:view-controller path="/login" view-name="login"/>
<!-- Forwards requests to the "/" resource to the "officer_registration" view -->
<mvc:view-controller path="/officer_registration" view-name="officer_registration"/>
<!-- Forwards requests to the "/" resource to the "citizenList" view -->
<mvc:view-controller path="/citizenList" view-name="citizenList"/>
<!-- Forwards requests to the "/" resource to the "citizen_registration" view -->
<mvc:view-controller path="/citizen_registration" view-name="citizen_registration"/>
<!-- __________________________________________________________________________________________________ -->
<!-- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> -->
<!-- Is used to process method level annotations -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- __________________________________________________________________________________________________ -->
<!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<!-- __________________________________________________________________________________________________ -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
document.getElementById("citizenRegistration").action="/crimeTrack/citizen_registration.htm";
document.getElementById("citizenRegistration").action="../citizen_registration.htm";
<input class="button" id="save" type="button" name="user_request" value="Save" onclick="submitPage('citizen_registration.htm');"/>
<input class="button" id="update" type="button" name="user_request" value="Update" onclick="submitPage('citizen_registration.htm');"/>
<input class="button" id="query" type="button" name="user_request" value="Query" onclick="submitPage('citizen_list.htm');"/>
function submitPage(action){
document.getElementById("citizenRegistration").action = action;
document.getElementById("citizenRegistration").method = "POST";
document.getElementById("citizenRegistration").submit();
}
@RequestMapping(value="citizen_list.htm", method = RequestMethod.POST)
public ModelAndView getCitizenList(@Valid @ModelAttribute Citizens citizen, BindingResult result, ModelMap m, Model model, @RequestParam(value="user_request") String user_request) throws Exception {
try{
logger.debug("about to preform query");
//citizenManager.getListOfCitizens(citizen);
if(citizenManager.getListOfCitizens(citizen).isEmpty()){
model.addAttribute("icon","ui-icon ui-icon-circle-close");
model.addAttribute("results","Notice: Query Caused No Records To Be Retrived!");
}else{
model.addAttribute("citizens",citizenManager.getListOfCitizens(citizen));
return new ModelAndView("citizenList");
}
}catch(Exception e){
logger.error("Exception in CitizenRegistrationController - ModelAndView loadPage "+e);
//request.setAttribute("error",e.getMessage());
return new ModelAndView("citizen_registration");
}
}
@RequestMapping(value="citizen_registration.htm", method = RequestMethod.POST)
public ModelAndView handleRequest(@Valid @ModelAttribute Citizens citizen, BindingResult result, ModelMap m, Model model, @RequestParam(value="user_request") String user_request) throws Exception {
try{
logger.debug("In Http method for CitizenRegistrationController - Punishment Registration");
logger.debug("User Request Is " + user_request);
if(result.hasErrors()){
logger.debug("Has Errors");
return new ModelAndView("citizen_registration");
}else{
//check if its a save of an update
if(user_request.equals("Save")){
citizenManager.RegisterCitizen(citizen);
model.addAttribute("icon","ui-icon ui-icon-circle-check");
model.addAttribute("results","Record Was Saved");
return new ModelAndView("citizen_registration");
} else if (user_request.equals("Update")){
logger.info("About to do update");
citizenManager.UpdateCitizen(citizen);
return new ModelAndView("citizen_registration");
}
}
logger.debug("Has No Errors");
return new ModelAndView("citizen_registration");
}catch(Exception e){
logger.error("Exception in CitizenRegistrationController - ModelAndView loadPage "+e);
//request.setAttribute("error",e.getMessage());
return new ModelAndView("citizen_registration");
}
}