(四)@RequestMapping和@RequestParam的使用。控制器接收来自网页的数据

@RequestMapping注解的作用:

用于路径映射:

例:

/*该方法的映射请求为 http://localhost:8080/项目名/user/register  .该方法支持GET请求*/
	@RequestMapping(value="/register",method=RequestMethod.GET)
	public String registerFrom(){

	}

@RequestParam注解的作用:

例:

public String register(@RequestParam("loginname") String loginname,
						   @RequestParam("password") String password,
						   @RequestParam("username") String username){}

前端的loginname变量的值赋给java程序的 String loginname变量

前端的password变量的值赋给java程序的 String password变量

前端的username变量的值赋给java程序的 String username变量


=============================================================

完整demo:

(登录注册demo):

0.要导入的jar包:


建议将 spring框架的jar包一次性导入,这样就一定不会缺包

=============================================================

1.目录树


=============================================================

2.springMVC核心配置文件:(spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xsi:schemaLocation="
	   	http://www.springframework.org/schema/beans
	   	http://www.springframework.org/schema/beans/spring-beans.xsd
	   	http://www.springframework.org/schema/mvc
	   	http://www.springframework.org/schema/mvc/spring-mvc.xsd
	   	http://www.springframework.org/schema/context
	   	http://www.springframework.org/schema/context/spring-context.xsd">
	   	
	   	<context:component-scan base-package="controller"></context:component-scan>
		<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
		<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="prefix">
				<value>/</value>
			</property>
			<property name="suffix">
				<value>.jsp</value>
			</property>
		</bean>
</beans>
14行:开启controller包中的注解扫描。

15行:springmvc的映射器的配置

16行:springmvc的适配器的配置

17行:springmvc的视图解析器的配置


=============================================================

3.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>pro4</display-name>
	<!-- 定义springMVC的前端控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>
5~17都属于配置servlet,且都是为了配置 springmvc中的前端控制器,用于拦截匹配的请求

7行:前端控制器的位置(不用改的)

10行:指定springmvc核心配置文件的路径

6行和15行的name要一样。
=============================================================

4.到目前为止,spring mvc的配置已经完成。

下面开始完成功能:

JAVA代码主要由2个部分组成,控制器(MVC中的C) 和 持久类,持久类用于记录登录或注册的用户的信息



持久类User.java:

package po;

import java.io.Serializable;

public class User implements Serializable{
	private String loginname;	//账号名
	private String password;	//密码
	private String username;	//用户姓名

	public User(){
		super();
	}

	public String getLoginname() {
		return loginname;
	}

	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}
}


控制器UserController.java:

package controller;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import po.User;  

@Controller
@RequestMapping(value="/user") //映射路径为http://localhost:8080/pro4/user
public class UserController{	
	private static List<User> userList;	//用一个静态的列表保存注册了的用户,模拟数据库
	
	public UserController(){
		super();
		userList = new ArrayList<User>();
	}
	
	private static final Log logger=LogFactory.getLog(UserController.class);

	/*该方法的映射请求为 http://localhost:8080/pro4/user/register  .该方法支持GET请求*/
	//pro4为项目的名称
	@RequestMapping(value="/register",method=RequestMethod.GET)
	public String registerFrom(){
		//logger.info("register GET方法被调用");
		return "registerForm";
	}
	
	/*该方法的映射请求为 http://localhost:8080/pro4/user/register  .该方法支持POST请求*/
	@RequestMapping(value="/register",method=RequestMethod.POST)
	public String register(@RequestParam("loginname") String loginname,
						   @RequestParam("password") String password,
						   @RequestParam("username") String username){
		logger.info("register POST方法被调用");
		User user = new User();
		user.setLoginname(loginname);
		user.setPassword(password);
		user.setUsername(username);
		userList.add(user);
		return "loginForm";//返回“loginForm”后,由spring-mvc.xml的规定,跳转至/loginForm.jsp处
	}
	
	/*该方法的映射请求为 http://localhost:8080/pro4/user/login */
	@RequestMapping(value="/login")
	public String login(@RequestParam("loginname") String loginname,
						@RequestParam("password") String password,
						Model model){
		logger.info("登录名:"+loginname+" 密码:"+password);//测试用的打印信息,可以不用管
		
		/*检测账号和密码是否在userList中存在*/
		for(User user :userList){
			if(user.getLoginname().equals(loginname) && user.getPassword().equals(password)){
				model.addAttribute("user",user);//检测通过后,给模型model建一个变量,用于把user对象传过去,让跳转的页面可以接收次变量
				return "welcome";
			}
		}
		return "loginForm";
	}
}



=============================================================

5.各个 JSP文件(相当于MVC中的视图V)

(1)loginForm.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>
	<h3>登陆页面</h3>
	<br>
	<form action="login" method="post">
		<table>
			<tr>
				<td><label>登录名:</label></td>
				<td><input type="text" id="loginname" name="loginname"></td>
			</tr>
			<tr>
				<td><label>密码:</label></td>
				<td><input type="password" id="password" name="password"></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="submit" value="登录" id="submit"></td>
			</tr>
		</table>
	</form>
	<form action="register">
		<table>
			<tr>
				<td></td>
				<td><input type="submit" value="注册" id="register"></td>
			</tr>
		</table>
	</form>
</body>
</html>


(2)registerForm.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="register" method="post">
		<table>
			<tr>
				<td><label>登录名:</label></td>
				<td><input type="text" id="loginname" name="loginname"></td>
			</tr>
			<tr>
				<td><label>密码:</label></td>
				<td><input type="password" id="password" name="password"></td>
			</tr>
			<tr>
				<td><label>用户性别:</label></td>
				<td><input type="text" id="username" name="username"></td>
			</tr>
			<tr>
				<td><input type="submit" value="注册" id="submit"><td>
			</tr>
		</table>
	</form>
</body>
</html>


(3)welcome.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>
	<h3>欢迎[${requestScope.user.username}}]登录</h3>
	<br>
</body>
</html>
登录成功后,会自动跳转到此页面。

第10行:KL表达式获取用 Model 传出的数据。(可以看看UserController.java的第60行,这里用Model传出数据)


=============================================================

demo操作过程:

输入http://localhost:8080/pro4/user/register (其中pro4为Web工程的名称)

输入信息,点击注册后,跳转到登录窗口


若点击注册,会返回注册窗口继续注册,若点击登录,若账号密码正确,会跳转到 welcome.jsp(登录成功页面)


猜你喜欢

转载自blog.csdn.net/u014453898/article/details/79570391