@RequestMapping
- 此注解可以加在类上,相当起个路径的包名。在客户端访问时添加包名/资源名称来访问
- 此注解可以加在方法上,相当于具体访问的路径。在客户端直接进行资源访问
- 此注解可以区分get请求post请求,分别进行处理
数据的提交方式
单个数据提交
<h2>数据提交</h2>
<form action="${pageContext.request.contextPath}/one.action" method="post">
用户名:<input name="uname"><br>
年龄:<input name="age">
<input type="submit" value="submit">
</form>
@RequestMapping("/one")
public String test01(String uname,int age){
System.out.println("uname = " + uname +" age = "+age);
return "main";
}
对象封装数据提交
<h2>对象的封装提交</h2>
<form action="${pageContext.request.contextPath}/two.action" method="post">
用户名:<input name="name"><br>
年龄:<input name="age">
<input type="submit" value="submit">
</form><br>
@RequestMapping("/two")
public String test02(User user){
System.out.println("username = "+user.getName()+" age = "+user.getAge());
return "main";
}
动态占位符(仅限于超链接)
@PathVariable:解析请求参数的名称给方法的形参 提交数据时使用/值的方式,在接收数据时以/{参数名}来指定请求参数的名称,使用@PathValible注解解析请求提交来的数据
<a href="${pageContext.request.contextPath}/three/zs/88.action">动态占位符</a>
/**
* @PathVariabl 的值要跟 @RequestMapping上的值一致
* @param name
* @param age
* @return
*/
@RequestMapping("/three/{name}/{age}")
public String test03(@PathVariable String name, @PathVariable String age){
System.out.println("name = " + name +" age = "+age);
return "main";
}
请求参数的名称与形参名称不一致
@RequestParam:此注解就是为了完成统一名称的映射
<h2>请求参数的名字与形参不一致</h2>
<form action="${pageContext.request.contextPath}/four.action" method="post">
用户名:<input name="uname"><br>
年龄:<input name="uage">
<input type="submit" value="submit">
</form><br>
@RequestMapping("/four")
public String test04(@RequestParam("uname") String name, @RequestParam("uage") String age){
System.out.println("name = " + name +" age = "+age);
return "main";
}
手工获取参数
<h2>手工获取数据</h2>
<form action="${pageContext.request.contextPath}/five.action" method="post">
用户名:<input name="uname"><br>
年龄:<input name="uage">
<input type="submit" value="submit">
</form><br>
@RequestMapping("/five")
public String test05(HttpServletRequest request){
String uname = request.getParameter("uname");
int uage = Integer.parseInt(request.getParameter("uage"));
System.out.println("name = " + uname +" age = "+uage);
return "main";
}
解决post请求中文乱码问题
在web.xml文件添加
<filter>
<filter-name>encode</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ajax访问
添加注解驱动
<!-- 添加注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
添加驱动
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.6.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.6</version>
</dependency>
在web-app下创建js文件夹 添加jquery包
<script src="js/jquery-3.4.1.js"></script>
页面
<h2>ajax</h2>
<a href="javascript:show()">ajax访问服务器</a>
<div id="mydiv">等待服务器返回list数据</div>
</body>
<script type="text/javascript">
function show(){
$.ajax({
url:"${pageContext.request.contextPath}/list.action",
type:"get",
dataType:"json",
success:function(list){
var s = "";
$.each(list,function(index,u){
s += u.name+"- - -"+u.age+'<br>';
});
//将数据回显
$("#mydiv").html(s);
}
})
}
</script>
数据处理
@RequestMapping("/list")
@ResponseBody
public Object test06(){
User u1 = new User("zs",18);
User u2 = new User("li",19);
User u3 = new User("ws",10);
User u4 = new User("zi",17);
List<User> list = new ArrayList<>();
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
return list; //springMVC自动转换为json格式返回
}
转发于重定向
action方法的默认内置参数
- HttpServletRequest
- HttpServletResponse
- HttpSession
- Model
- ModelMap
- Map
request,session,model,modelMap,map都可以携带数据。 request,model,modelMap,map都可以使用请求作用域,跳转时只能以请求转发的方式跳。如果重定向跳转,则数据丢失
index.jsp
<a href="${pageContext.request.contextPath}/data.action">访问携带数据跳转</a>
dataController
@RequestMapping("/data")
public String data(HttpServletRequest request,
HttpServletResponse response,
HttpSession session,
Model model,
ModelMap modelMap,
Map map){
User user = new User("taylor",12);
request.setAttribute("requestUser",user);
session.setAttribute("sessionUser",user);
model.addAttribute("modelUser",user);
modelMap.addAttribute("modelMapUser",user);
map.put("mapUser",user);
return "main";
}
main.jsp
requestUser = ${requestUser}<br>
sessionUser = ${sessionUser}<br>
modelUser = ${modelUser}<br>
modelMapUser = ${modelMapUser}<br>
mapUser = ${mapUser}<br>
日期处理
WEB-INF目录下的资源访问
将动态资源放入web-inf目录下的原因是更安全。不可以直接对外访问。必须通过请求转发来进行访问
拦截器
功能类似于过滤器。在请求被处理之前,在控制器方法结束执行之后,还有全部请求响应结束是添加拦截操作。进行各种业务功能处理。
1)拦截器应用场景
日志处理,权限处理,性能测试
2)拦截器执行的时机
预处理:在请求到达action前进行处理 后处理:在action方法结束后进行处理 最终处理:请求和响应结束后进行善后处理,关闭资源,销毁对象
3)拦截器实现的方式
A:实现接口(推荐使用),HandlerInterceptor 接口
B:继承父类 HandlerInterceptorAdapter父类
4)HandlerInterptor接口中的方法 preHandle() 、postHandler、afterCompletion()
实现权限验证案列
功能:没有登录不允许访问main.jsp和index.jsp
实现步骤:
- 添加登录的login.jsp页面
- 添加showLogin的action,打开登录页面
- 添加登录判断的action,实现登录功能验证
- 添加拦截器,进行是否登录过的判断,进行拦截或者放行
- 在springmvc.xml文件中注册拦截器
- 测试功能
login.jsp
<body>
<h2>login page</h2>
<form action="${pageContext.request.contextPath}/login">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
${msg}
</body>
login.controller
@RequestMapping("login")
public String login(String name, String password, HttpServletRequest request){
if(name.equals("zs") && password.equals("123")){
request.getSession() .setAttribute("user",name);
return "main";
}else{
request.setAttribute("msg","Login Info Error");
return "login";
}
}
loginInterceptor
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/**
* 判断是否登录过
* 从session中获取user用户的信息,如果有,则登录过放行,如果没有 则回到登录页面
*/
if(request.getSession().getAttribute("user") == null){
request.setAttribute("msg","您还没有登录,请先去登录");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
return true;
}
}
springmvc
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/"/>
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/showLogin"/>
<bean class="com.bjpowernode.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
ssm整合
建库建表