RequestMapping注解类型:
package controller;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.UserForm;
import service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
//得到一个用来记录日志的对象,这样打印信息的时候能够标记打印的是那个类的信息
private static final Log logger = LogFactory.getLog(UserController.class);
//将服务层依赖注入到属性userService
@Autowired
public UserService userService;
/**
* 处理登录
*/
//作用在处理方法上,注解的value属性将请求URI映射到方法
@RequestMapping("/login")
public String login(UserForm user, HttpSession session, Model model) {
if(userService.login(user)){
session.setAttribute("u", user);
logger.info("成功");
return "main";//登录成功,跳转到main.jsp
}else{
logger.info("失败");
model.addAttribute("messageError", "用户名或密码错误");
return "login";
}
}
/**
*处理注册
*/
@RequestMapping("/register")
public String register(@ModelAttribute("user") UserForm user) {
if(userService.register(user)){
logger.info("成功");
return "login";//注册成功,跳转到login.jsp
}else{
logger.info("失败");
//使用@ModelAttribute("user")与model.addAttribute("user", user)功能相同
//在register.jsp页面上可以使用EL表达式${user.uname}取出ModelAttribute的uname值
return "register";//返回register.jsp
}
}
}
其中,RequestMapping 注解语句,都作用在处理方法上,其value属性将请求URI映射到方法,
URI: 统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的,此处指login.jsp
在访问上述的login()方法之前,需先在/WEB-INF目录下创建login.jsp文件
session:记录一系列状态
Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。
解释session:当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session
原理:HTTP协议是非连接性的,取完当前浏览器的内容,然后关闭浏览器后,链接就断开了,而没有任何机制去记录取出后的信息。而当需要访问同一个网站的另外一个页面时(就好比如在第一个页面选择购买的商品后,跳转到第二个页面去进行付款)这个时候取出来的信息,就读不出来了。所以必须要有一种机制让页面知道原来页面的session内容。