创建的类名没有限制,但最好以Controller结尾
基于配置的写法
public class LoginController implements Controller{//实现Controller接口
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//实例化ModelAndView对象
ModelAndView mAndView = new ModelAndView();
//添加模型数据
mAndView.addObject("username",username);//等价与request.setAttribute("username",username);
mAndView.addObject("password",password);
//设置逻辑视图名
mAndView.setViewName("LoginSuccess");//请求转发
return mAndView;
}
}
添加springMVC-servlet.xml配置
<!-- 配置请求页面控制器映射,表单提交的URL -->
<bean name="/login" class="com.mitu.controller.LoginController" />
基于注解写法
首先需要配置springMVC-servlet.xml
<!-- 开启springMVC注解驱动 -->
<mvc:annotation-driven/>
<!-- 开启注解扫描器 -->
<context:component-scan base-package="com.mitu.controller(页面控制器所在包)" />
@Controller //声明该类为页面控制器
public class RegisterController {
//返回值必须为String类型,用于设置返回逻辑视图名,如果返回null默认是@RequestMapping("register1")中URL地址+“.jsp”
//请求参数绑定 一: @RequestParam("username")String name ,自动将表单中name属性值添加到参数中
@RequestMapping("register1") //指明URL地址与页面控制器处理方法映射
public String register1(@RequestParam("username")String username, @RequestParam("password")String password,@RequestParam("email") String email) {
System.out.println(username);
System.out.println(password);
System.out.println(email);
return "RegisterSuccess"; //设置逻辑视图名、请求转发
}
//请求参数绑定 二:String username 参数名必须与请求参数名相同
@RequestMapping("register2")
public String register2(String username, String password, String email) {
System.out.println(username);
System.out.println(password);
System.out.println(email);
return "RegisterSuccess";
}
//请求参数绑定 三:UserBean bean中属性名必须与请求参数名相同
@RequestMapping("register3")
public String register3(UserBean user) {
System.out.println(user);
return "RegisterSuccess";
}
}
请求参数绑定后会默认将模型数据储存到request中,页面调用方法 如UserBean:${userBean}第一个字母小写
springMVC封装的session并不好用,可以自己增加方法的参数HttpSession session使用原session
@Controller //声明该类为页面控制器
//指明将模型数据存放在session中(复制一份request中的数据),需要时才添加注解,默认将模型数据存放在request中
//@SessionAttributes("message") 中message是存储的数据的名称,也可以是参数user
@SessionAttributes("message")
public class RegisterController {
@RequestMapping("/jsp/register")
public String register(UserBean user,ModelMap map,SessionStatus status) {//ModelMap是对request的封装
System.out.println(user);
String message = (String)map.get("message");
if(message==null) {
map.addAttribute("message", "你好");//等价于request.setAttribute("message", "你好")
}else {
map.remove("message");//清除request中的数据
status.setComplete();//清除session保存的数据
}
return "RegisterSuccess";
}
}
相对的页面调用:
<div>${userBean.username},只读取request中属性:${requestScope.message},只读取session中属性:${sessionScope.message}</div>
<div>${requestScope.userBean}</div>
获取当前页面的绝对路径
<% //最好放在HTML上方
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
网页上的所有相对路径在链接时都将在前面加上基链接指向的地址
<base href="<%=basePath %>" /> //放在head标签内