您的位置:首页 > 编程语言 > Java开发

Spring Web MVC注解应用及一些常用方法技巧

2016-12-26 11:54 609 查看

Spring Web MVC注解应用

a.RequestMappingHanlderMapping组件

@RequestMapping(“/login..do”)

该标签用在Controller业务方法前

b.Controller编写和配置

取消了实现Controller接口及方法的约定

可以允许我们按需要灵活定义业务方法

public ModelAndView或者String 方法名(根据需要定义 request,response,session){}

(Controller需要扫描到Spring容器,必须使用@Controller)

还是写例子 hello.jsp

处理流程是一样的

Spring配置文件:

<!-- 等价于handlermapping和handleradapter两个bean。其实还有其他的 -->

<!-- 开启扫描controller -->
<context:component-scan base-package="Controller"></context:component-scan>
<!-- 配置viewResolver -->

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>

</bean>


web.xml

<servlet>
<servlet-name>springwebmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指明配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<!-- <load-on-startup>1</load-on-startup>   -->
</servlet>
<servlet-mapping>
<servlet-name>springwebmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


Controller:

package Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//扫描到Spring容器
public class toLogonController  {
@RequestMapping("logon.do")
public ModelAndView execute(){
ModelAndView mav = new ModelAndView("hello");

return mav;

}
}


hello.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>Spring MVC example</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>

<h1>Spring Web MVC 注解版</h1>

</body>
</html>




再写下登陆

//进入登陆页面

/tologin.do

DispatcherServlet

Handlermapping

LoginController

ViewResolver

login.jsp

login.do

DispatcherServlet

Handlermapping

LoginController

ViewResolver

正确jsp 错误jsp

主要是Controller

可以把多个控制写在一个里面不同的就是请求路径

package Controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//扫描到Spring容器
public class toLogonController  {
@RequestMapping("tologin.do")
public ModelAndView execute(){
ModelAndView mav = new ModelAndView("login");

return mav;

}

@RequestMapping("login.do")
public String checkLogin(HttpServletRequest request){
String username=request.getParameter("username");
String password=request.getParameter("password");
if(username.equals("root")&&password.equals("1234")){
return "hello";
}else

return "login";
}

}




1.Controller如何接收请求参数

a.利用HttpServletRequest

b.利用业务方法参数

参数名与请求参数key保持一致

请求:
login.do?username=xxx


Controller中:

public String f1(String username){}


或者利用@RequetParam(“key”)

public checkLogin1( @RequetParam(“key”) String username
){
}


然后这个username就有值了。

注意:这个@RequetParam(“key”)是在方法参数中写在参数前面的

c.利用实体对象参数

//使用实体对象user接收请求参数
public String checkLogin2(User user){
//利用 user来接收参数并获取。
}
然后创建一个entity包写入类 User
public class User implements Serializable(){
//最好写上接口 Serializable 方便以后序列化
private String username;
private String password;
加上set get方法
}


少量参数使用b;利用方法参数名保持一致。大量参数使用c;如果客户端表单数据没有格式检查,遇到非字符串使用a;

2.Controller如何向响应jsp传值

a.利用HttpServletRequest(setAttribute方法)

b.利用ModelAndView 返回一个ModelAndView对象利用

mav.getModel().put()方法
其实这个Model是个map

c.利用ModelMap方法参数

@RequestMapping(“login3.do”)
public String checkLogin3( String username String password  ModelMap model){
//传给jsp值
//增加一个参数 ModelMap
model.put(“username”,username);
//在jsp中用el表达式获取 ${username}
}


d.使用@ModelAttribute(“key”)

一个是get方法前面,一个方法参数前面

public String checkLogin4(@ModelAttribute(“user”)String username ){}


这么写就直接会帮你传过去。获取就是${user}

但只能把参数值传过去。

或者

@ModelAttribute(“user”)
public String getName(){
return “tom”
}
等价于
model.put(“user”,getName()); //${user}


主要用a和c

3.Controller如何使用session

public String checkLogin(HttpSession session){
session.setAttribute(key,value);

}


然后在jsp中获取session内容还是用el表达式

${sessionScope.username}


案例:列表显示功能

/list.do

DispatcherServlet

HandlerMapping

ListController(List,传递到list.jsp)

ViewResolver

/WEB-INF/list.jsp

Controller:

package Controller;

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

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import entity.User;

@Controller
public class ListController {
@RequestMapping("list.do")
public String listController(HttpServletRequest request){

List<User> list =new ArrayList<User>();
for(int i=0;i<5;i++){
User user = new User();
user.setUsername("admin"+i);
user.setPassword("password"+i);

list.add(user);

}

request.setAttribute("list", list);

return "list";
}

}


User:

package entity;

public class User {

private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


list.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>list</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>
<%@page import="entity.*" %>
<body>
<h1>list</h1>
<table>
<tr>
<td>id</td>
<td>username</td>
<td>password</td>
</tr>
<%
List<User> list = ( List<User>)request.getAttribute("list");
int i=0;
for(User user:list){
i++;
String username=user.getUsername();
String password=user.getPassword();
%>
<tr>
<td><%=i %></td>
<td><%=username %></td>
<td><%=password %></td>
</tr>

<%
}

%>

</table>

</body>
</html>




使用jstl标签:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>list</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>
<%@page import="entity.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<body>
<h1>list</h1>
<table>
<tr>
<td>id</td>
<td>username</td>
<td>password</td>
</tr>

<c:forEach items="${list}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>

</c:forEach>
</table>

</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐