gpt4 book ai didi

java - SPRING 3.0 MVC 2 页 1 Controller

转载 作者:行者123 更新时间:2023-12-01 13:31:13 25 4
gpt4 key购买 nike

我只想在JAVA Spring 3.0 MVC中拥有2个函数,例如page1.htmpage2.htm > 只有 1 个 Controller ,有点在 CodeIgniter 中,我不知道为什么这么难......

这就是我到目前为止所做的

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package controllers;

import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

// Import models
import models.LoginModel;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
*
* @author Candy
*/

@RequestMapping("/app")
public class LoginController extends SimpleFormController {
public LoginController()
{
//Initialize controller properties here or
//in the Web Application Context

setCommandClass(models.Employee.class);
setCommandName("Employee");
//setSuccessView("pages/login/login_form_view");
//setFormView("pages/login/login_execute_view");
}


// On form load
@Override
protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception
{
LoginModel loginModel = new LoginModel(request);

if(!loginModel.isLogged())
{
ModelAndView mv = new ModelAndView("pages/login/login_form_view");

// mv.addObject("chestie",loginModel.isLogged());

return mv;
}
else
{
return new ModelAndView("redirect:/dashboard.htm");
}


}

@Override
protected void doSubmitAction(Object command) throws Exception
{
throw new UnsupportedOperationException("Not yet implemented");
}

//Use onSubmit instead of doSubmitAction
//when you need access to the Request, Response, or BindException objects
@Override
protected ModelAndView onSubmit(
HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors) throws Exception
{
// User has submited a POST request
ModelAndView mv = new ModelAndView("pages/login/login_execute_view");

// Check if the user is logged or not, user must be NOT LOGGED in order to log
LoginModel loginModel = new LoginModel(request);
if(!loginModel.isLogged())
{
// Just continue
String email = request.getParameter("email").toString();
String password = request.getParameter("password").toString();

// Check this email/pass
Map<String,String> resultLogin = loginModel.login(email, password);

String result = resultLogin.get("result").toString();
String reason = resultLogin.get("reason").toString();
// String qqq = resultLogin.get("qqq").toString();

/*
java.util.Date dt = new java.util.Date();

java.text.SimpleDateFormat sdf =
new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String currentTime = sdf.format(dt);
*/
if(result == "true")
{
// Login is good, redirect to dashboard
return new ModelAndView("redirect:/dashboard.htm");

// Display the error
//mv.addObject("loginResult",result);
//mv.addObject("loginReason",reason);
//mv.addObject("qqq",qqq);
//mv.addObject("qqq2",request.getSession().getAttribute("is_logged").toString());
}
else
{
// Display the error
mv.addObject("loginResult",result);
mv.addObject("loginReason",reason);

return mv;
}

}
else
{
return new ModelAndView("redirect:/login.htm");
}
}
}

如果我删除此 Controller 将无法工作

applicationContext.xml
<bean class="controllers.LoginController"/>

dispatcher-servlet.xml
<bean class="controllers.LoginController" p:formView="pages/login/login_form_view" p:successView="pages/login/login_execute_view"/>

web.xml
<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>controllers.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
  1. 为什么我在创建新 Controller 时必须编辑 3 个 XML?是不是有更简单的方法?

  2. 我现在想要的只是创建另一个函数 logout() 来加载 ModelAndView mv = new ModelAndView("pages/login/logout_view");,仅此而已。

还有这个

@RequestMapping("/app")
@Override
protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception
{
ModelAndView mv = new ModelAndView("pages/login/login_form_view");

return mv;
}

给我 404 错误...

  1. 我应该使用什么? SimpleFormController扩展 Controller AbstractController(我正在使用NETBEANS)。我很困惑,我希望有一个像CodeIgniter这样好的java框架。我不太明白映射是如何工作的,但我确实知道 apache 重写 是如何工作的。

非常感谢。

最佳答案

如果您使用的是Spring 3,您可以轻松使用@controller用于页面请求和导航的 Controller 类的注释。

您可以使用@Service您的业​​务逻辑的注释和 @Repository为您的数据库事务并使用 @Autowired 将这些层绑定(bind)在一起还有注释。

所以你的请求是这样的( UI Request -> @Controller -> @Service -> @Repository )并再次返回到原​​始 Controller 类进行导航。

但是关于你的问题,当你用 @Controller 标记类(class)时spring 中的注释,这仅仅意味着您为 URL 映射和导航候选该类,下面的示例展示了如何使用 @RequestMapping Controller 类中用于 URL 映射的注释:

@Controller
@RequestMapping("/employee")
public class Employees{

@AutoWired
private EmployeeServiceInterface empServInt;

@ModelAttribute("empAdd")
public Employee createEmployeeModel(){
return new Employee();
}

@RequestMapping(value="/add", method = RequestMethod.POST)
public String addEmployee(@ModelAttribute("empAdd")Employee employee,Model model, HttpSesion session){

Employee employee = empServInt.createUser(employee);
if(yourCondition()){
return "redirect:/TO_THIS_PAGE";
}
return "GO_TO_PAGE_NAVIGATION_HERE";
}
}

请注意,当请求带有 URL HOST_NAME:PORT/PROJECT_NAME/employee/add 时,@RequestMapping 就会被激活。因为@RequesMapping注释值。

其次@ModelAttribute您在示例中看到,为页面创建一个模型,帮助您使用 Spring Form 标记中的 commandName 属性从 UI 提交 Employee Object Bean 值,该标记使用 path="" 将 html 输入绑定(bind)到 Employee Bean 类。属性:

<form:form commandName="empAdd" method="post" >...</form:form>

第三,请注意 @AutoWired 可以自动将接口(interface)连接到实现,因此在我的示例中,如果像 EmployeeServiceImpl 这样的类实现接口(interface) EmployeeServiceInterface通过调用接口(interface)方法,例如:empServInt.createUser(employee); spring自动为你调用相关的EmployeeServiceImpl.createUser(employee)实现方法。

第四:请注意,为了能够使用 Controller 以及 Service & Repository 注释来工作,您应该在 Spring Descriptor XML 文件中定义具有这些注释的包,如下所示:

<context:component-scan base-package="java.package" />

第五,如果您注意到Employees中的方法具有提供导航的String返回类型,但要使其工作,您应该定义将在Spring Descriptor XMl文件中返回的页面前缀和后缀,如下所示:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>

根据上面的配置,如果您的带有 @RequestMapping 注解的方法返回 employee String,Spring 从这个位置获取页面:

[PREFIX]employee[POSSIX] --> /WEB-INF/view/employee.jsp

为了更好地理解,我为您找到了一个有用的示例链接。 Link

祝你好运!

关于java - SPRING 3.0 MVC 2 页 1 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com