Spring MVC的Controller

1、基于注解的控制器

1.1、Controller注解类型

在src下的Controller包中创建controller.java,示例代码如下:

@Controller
public class IndexController {
	@RequestMapping("/login")
	public String login() {
		return "login";
	}
	@RequestMapping("/register")
	public String register() {
		return "register";
	}
}

在配置文件WEB-INF/目录下创建配置文件springmvc-servlet.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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.2.xsd">
	<!-- 扫描路径 -->
	<context:component-scan base-package="controller">
	</context:component-scan>
	<!-- 
	<bean name="/login" class="controller.LoginController"></bean>
	<bean name="/register" class="controller.RegisterController"></bean>
	 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		id="internalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<!-- 后缀 -->
		<property name="suffix" value="/.jsp"></property>
		</bean>
</beans>

1.2、Request注解类型

建议使用类级别注解,即当中在类上方的@RequestMapping("/index"),这样可以方便维护程序


@Controller
@RequestMapping("/index")
public class IndexController {
	@RequestMapping("/login")
	public String login(HttpSession session,HttpServletRequest request) {
		session.setAttribute("skey","session范围的值");
		request.setAttribute("rkey","request范围的值");
		return "login";
	}

	@RequestMapping("/register")
	public String register(Model model) {
		model.addAttribute("success","注册成功");
		return "register";
	}
}

1.3、编写请求处理方法

如果需要在请求处理方法中使用Servlet API类型,那么可以将这些类型作为处理方法的参数类型,例如:

@Controller
@RequestMapping("/index")
public class IndexController {
	@RequestMapping("/login")
	public String login(HttpSession session,HttpServletRequest request) {
		session.setAttribute("skey","session范围的值");
		request.setAttribute("rkey","request范围的值");
		return "login";
	}

	@RequestMapping("/register")
	public String register(Model model) {
		model.addAttribute("success","注册成功");
		return "register";
	}
}

2、Controller接收请求参数的常见方式

2.1、通过实体Bean接收请求参数

通过一个实体bean来接收请求参数,适用于get和post两者,但是bean 的实行名称必须和请求参数名称相同

1、创建首页面的index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
	未注册的用户,请
	<a href="${pageContext.request.contextPath}/index/register">注册</a>!
	<br /> 已注册的用户,去
	<a href="${pageContext.request.contextPath}/index/login">登录</a>!
</body>
</html>
2、完善配置文件springmvc-servlet.xml

resources可以过滤掉不需要dispatcherservlet的资源(即静态资源,css,js,html,images)
注意,在使用resources时必须使用annotation-driven,否则resources元素会组织任意控制器被调用

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.2.xsd">
	<!-- 扫描路径 -->
	<context:component-scan base-package="controller">
	</context:component-scan>
	
	<!-- 
	<bean name="/login" class="controller.LoginController"></bean>
	<bean name="/register" class="controller.RegisterController"></bean>
	 -->
	 
	 <mvc:annotation-driven></mvc:annotation-driven>
	 <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
	 <mvc:resources location="/html/" mapping="/html/**"></mvc:resources>
	 <mvc:resources location="/images/" mapping="//images/**"></mvc:resources>
	 
	 <!-- 配置视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		id="internalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<!-- 后缀 -->
		<property name="suffix" value="/.jsp"></property>
		</bean>
</beans>

3、创建pojo实体类
public class UserForm {
	private String uname;
	private String upass;
	private String reupass;
	//此处省略get和set方法
}
4、创建控制器类

在controller包中创建控制器类IndexController和UserController

@Controller
@RequestMapping("/index")
public class IndexController {
	@RequestMapping("/login")
	public String login() {
		return "login";
	}

	@RequestMapping("/register")
	public String register() {
		return "register";
	}
}

@Controller
@RequestMapping("/user")
public class UserController {
	// 得到一个用来记录日志的对象,这样在打印信息的时候能够标记打印的是那哪个类的信息
	private static final Log logger = LogFactory.getLog(UserController.class);

	/**
	 * 处理信息
	 * 使用UserForm对象(实体Bean)user接收注册页面提交的请求参数
	 */
	@RequestMapping("/login")
	public String login(UserForm user,HttpSession session,Model model){
		if("zhangsan".equals(user.getUname())&&"123456".equals(user.getUpass())){
			session.setAttribute("u", user);
			logger.info("成功");
			return "main";
		}else{
			logger.info("失败");
			model.addAttribute("messageError","用户名或密码错误");
			return "login";
		}
	}
	/**
	 * 处理注册
	 * 使用UserForm对象(实体Bean)user接收注册页面提交的请求参数
	 */
	@RequestMapping("/register")
	public String register(UserForm user,Model model){
		if("zhangsan".equals(user.getUname())&&"123456".equals(user.getUpass())){
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			//在register.jsp頁面上可以使用EL表达式取出model的uname值
			model.addAttribute("uname",user.getUname());
			return "register";
		}
	}
}
5、创建页面视图

在/WEB-INF/jsp目录下创建register.jsp和login.jsp,此处只有(偷懒)register.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/user/register"
		method="post" name="registerForm">
		<table border="1" bgcolor="lightblue" align="left">
			<tr>
				<td>姓名:</td>
				<td><input class="textSize" type="text" name="uname"
					value="${uname}"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input class="textSize" type="password" maxlength="20"
					name="upass"></td>
			</tr>
			<tr>
				<td>确认密码:</td>
				<td><input class="textSize" type="password" maxlength="20"
					name="reupass"></td>
			</tr>
			<td colspan="2" align="center"><input type="button" value="注册"
				onclick="allIsNull()"></td>
		</table>
	</form>
</body>
</html>

2.2通过处理方法的形参接收请求参数

只需要将userController中的部分代码改为:

	@RequestMapping("/register")
	public String register(String uname,String upass,Model model){
		if("zhangsan".equals(uname)&&"123456".equals(upass)){
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			//在register.jsp頁面上可以使用EL表达式取出model的uname值
			model.addAttribute("uname",uname);
			return "register";
		}
	}

2.3通过HttpServletRequest接收请求参数

可将上一部分的代码改为:

	@RequestMapping("/register")
	public String register(HttpServletRequest request,Model model){
		String uname = request.getParameter("uname");
		String upass = request.getParameter("upass");
		if("zhangsan".equals(uname)&&"123456".equals(upass)){
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			//在register.jsp頁面上可以使用EL表达式取出model的uname值
			model.addAttribute("uname",uname);
			return "register";
		}

2.4 通过@PathVariable接收URL中的请求参数

注:必须加method属性

	// method中的RequestMethod.GET表示该方法的使用模式
	@RequestMapping(value = "/register/{uname}/{upass}", method = RequestMethod.GET)
	public String register(@PathVariable String uname, @PathVariable String upass, Model model) {
		if ("zhangsan".equals(uname) && "123456".equals(upass)) {
			logger.info("成功");
			return "login";
		} else {
			logger.info("失败");
			// 在register.jsp頁面上可以使用EL表达式取出model的uname值
			model.addAttribute("uname", uname);
			return "register";
		}
	}

3、@ModelAttribute

在controller获取的参数中填写@ModelAttribute(“user”) UserForm user则会将请求参数的输入封装到user对象中,二是创建UserForm实例,以user为键值存储在Model对象中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC是一种基于MVC(Model-View-Controller)设计模式的Web框架,它可以帮助我们快速地开发Web应用程序。在Spring MVC中,Controller是控制器的核心组件,它负责接收用户请求并决定如何处理这些请求。 在Spring MVC中,我们可以通过编写Controller类来实现请求的处理。在Controller类中,我们可以定义多个方法,每个方法对应处理一个具体的请求。这些方法通常使用注解来标识它们应该处理哪些请求。 例如,我们可以使用@Controller注解来标识一个类为Controller,并使用@RequestMapping注解来标识一个方法应该处理哪些请求。下面是一个简单的Controller类的示例: ``` @Controller @RequestMapping("/hello") public class HelloController { @RequestMapping("/world") public ModelAndView helloWorld() { String message = "Hello World, Spring MVC!"; return new ModelAndView("hello", "message", message); } } ``` 在上面的示例中,我们使用@Controller注解将HelloController类标识为Controller,并使用@RequestMapping注解将该类处理的请求路径设置为“/hello”。我们还使用@RequestMapping注解将helloWorld方法标识为处理“/hello/world”请求的方法。该方法返回一个含“Hello World, Spring MVC!”消息的ModelAndView对象。 需要注意的是,Controller类的方法可以返回不同类型的结果。除了ModelAndView之外,还可以返回String、void、HttpEntity、ResponseEntity等类型的结果。这些结果将由Spring MVC框架进行处理,并将相应的内容返回给客户端。 总的来说,Spring MVCController是Web应用程序的核心组件之一,它可以帮助我们快速地开发功能强大、易于维护的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值