使用注解来开发基于springMVC的web应用
编程步骤:
Step1:导包
Step2:添加spring的配置文件
step3:配置DispatcherServlet(他是一个Servlet,所以在web.xml如下配置)
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
Step4:写controller
/*
* 如何写一个处理器
* 1:不用实现一个Controller接口
* 2:可以在处理器类当中,添加多个方法
* 每个方法处理一组类型的请求
* 3:方法名不做要求,返回类型可以是ModelAndView
* 也可以是String类型(只有视图名)
* 4:使用@Controller注解,将该处理器纳入容器进行管理
* 5:使用@RequestMapping,告诉前端控制器(DispatcherServlet)
* 请求路径与处理器的方法的对应关系(spring不用配置HandlerMapping了)
* */
@Controller
public class HellController{
@RequestMapping("/hello.do")
public String hello(){
System.out.println("hello()");
return "hello";
}
}
Step5:写JSP文件
Step6:配置spring.xml文件如下
<!-- 配置组件扫描 -->
<context:component-scan base-package="controller"></context:component-scan>
<!-- 配置MVC注解扫描 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
读取请求参数
Jsp 页面:
(1)第一种方式:通过请求对象(request)来读取:
@RequestMapping("/login.do")
public String login1(HttpServletRequest request){
System.out.println("login1()");
String adminCode=request.getParameter("adminCode");
String pwd=request.getParameter("pwd");
将request对象作为方法的参数传入即可
(2)第二种方式:使用@RequestParam注解
//读取请求参数的第二种方式,
使用@RequestParam添加到方法的形参前面
当传入的参数和实际参数不一致时,使用@RequestParam注解
即使一样,也要使用@RequestParam注解(Java反射机制缺陷,形参的的信息可能读不出来)
@RequestMapping("/login2.do")
public String login2(String adminCode,
@RequestParam("pwd") String password){}
(3)第三种方式:使用Javabean封装请求参数值(***)
Step1:写一个Java类,
实现get/set方法
在有@controller注解的类的方法里传入实现了get/set方法的类型
在注解的类的方法里可以使用 .getXXX(bean属性)方法获取
AdminParam(一个实体类)
@RequestMapping("/login3.do")
public String login3(AdminParam ap){
System.out.println("login3()");
System.out.println("adminCode:"+ap.getAdminCode());
System.out.println("pwd:"+ap.getPwd());
return "index";
}
向页面传值
(1)将数据绑定到request,然后转发到某个JSP
spring默认使用转发
//向页面传值得第一种方式
@RequestMapping("/login4.do")
private String login4(AdminParam ap,
HttpServletRequest request) {
System.out.println("login4()");
String adminCode=ap.getAdminCode();
System.out.println(adminCode);
//将数据绑定到请求对象request,springmvc默认转发到index.jsp
request.setAttribute("adminCode", adminCode);
return "index";
(2)使用ModelAndView
(将数据项封装到ModelAndView对象里面,然后将对象作为方法的返回值)
//向页面传值第二种方式,ModelAndView对象
@RequestMapping("/login5.do")
public ModelAndView login5(AdminParam ap){
System.out.println("login5()");
String adminCode=ap.getAdminCode();
System.out.println(adminCode);
Map<String, Object> data=new HashMap<String, Object>();
//相对于request.setAttribute("adminCode",adminCode)
data.put("adminCode", adminCode);
//构造ModelAndView对象
ModelAndView mav=new ModelAndView("index",data);
return mav;
(3)使用ModelMap(****)
(将该对象作为方法的参数,然后将数据绑定到该对象)
向页面传参第三种方式
//向页面传值的第三种方式
//使用ModelMap对象
//相对于request.setAttribute...
@RequestMapping("/login6.do")
public String login6(AdminParam ap,
ModelMap mm){
System.out.println("login6()");
String adminCode=ap.getAdminCode();
System.out.println(adminCode);
mm.addAttribute("adminCode", adminCode);
return "index";
}
使用session:(重定向情况下使用)
一般情况使用生命周期短的(request..)
重定向:返回值是一个String
如果方法的返回值时String
在重定向地址前添加“redirect”
Return “redirect:toIndex.do”
//重定向
@RequestMapping("/login8.do")
public String login8(){
System.out.println("login8()");
return "redirect:toIndex.do";
}
@RequestMapping("/toIndex.do")
public String toIndex(){
System.out.println("toIndex()");
return "index";
}
如果方法的返回值是ModelAndView
@RequestMapping("/toIndex.do")
public String toIndex(){
System.out.println("toIndex()");
return "index";
}
//重定向返回值是一个ModelAndView
@RequestMapping
public ModelAndView login9(){
System.out.println("login9()");
RedirectView rv=new RedirectView("toIndex.do");
return new ModelAndView(rv);
}
表单提交数据,记得添加name(****)
尽量不要在set/get 方法里面试图做判断,
可以在获取值后再加判断!(应该是与bean属性有关,猜的)