@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;
}
}
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(登录成功页面)