springmvc所涉及组件:
springmvc相关配置:
1、在web.xml中配置如下标签
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--contextConfigLocation配置springmvc加载的配置文件(配置处理器、映射器、适配器等)-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--配置url-pattern方式:
第一种:*.action 访问以.action结尾的文件由DispatcherServlet解析
第二种:/ 所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析,
这种方式可以实现RESTFul风格的url
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
2、在src下会自动生成spring-config.xml,需要添加的配置如下
<!--配置Handler
Handler的name属性相当于路径,可随意命名,class属性为编写的Handler,也就是controller
-->
<bean name="/test.action" id="TestController"class="controller.TestController"/>
以下是两种非注解的映射器配置
第一种配法
<!--非注解处理器映射器-->
<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
第二种配法
<!--简单url映射,上面的第二种形式-->
<beanclass="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<!--对controller进行映射-->
<prop key="/test1.action">TestController</prop>
</props>
</property>
</bean>
以下是两种非注解的适配器配置
<!--非注解处理器适配器 要求所编写的Handler实现Controller接口-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--另一种非注解的适配器 要求所编写的Handler实现HttpRequestHandler接口-->
<beanclass="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
上面都是鸡肋,不常用。
<!--注解映射器-->
<beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器-->
<beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!--使用下面的这个标签可以代替上面的两个注解映射器与适配器,并且封装了很多有用的东西。实际开发就用它-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--这里配置前缀和后缀以后,就不用在Handler中写绝对路径了,只需写上缺的那部分即可-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
3、还需创建视图,也就是jsp。
4、自行编写Handler,也就是controller
@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//因为没有连接数据库,这里做数据模拟
List<UserEntity> UserList=new ArrayList<UserEntity>();
UserEntity zhangsan=new UserEntity();
zhangsan.setName("张三");
zhangsan.setSex("boy");
zhangsan.setYear(20);
UserEntity lisi=new UserEntity();
lisi.setName("李四");
lisi.setYear(20);
lisi.setSex("girl");
UserList.add(zhangsan);
UserList.add(lisi);
//返回ModelAndView
ModelAndView modelAndView=new ModelAndView();
//此方法相当于request的setAttribut,这样就可以在jsp页面通过UserList取数据了
modelAndView.addObject("UserList",UserList);
//指定视图
modelAndView.setViewName("/WEB-INF/jsp/test.jsp");
return modelAndView; //To change body of implemented methods use File | Settings | File Templates.
}
}
@RequestMapping("/jsp")
//上面的RequestMapping可以添加根路径,用于区分
public class TestController03 {
//@RequestMapping实现对selectAll方法和url进行映射,一个方法对应一个url
//一般建议将方法名称和url写成一样
@RequestMapping("/selectAll")
public ModelAndView selectAll(){
//因为没有连接数据库,这里做数据模拟
List<UserEntity> UserList=new ArrayList<UserEntity>();
UserEntity zhangsan=new UserEntity();
zhangsan.setName("张三");
zhangsan.setSex("boy");
zhangsan.setYear(20);
UserEntity lisi=new UserEntity();
lisi.setName("李四");
lisi.setYear(20);
lisi.setSex("girl");
UserList.add(zhangsan);
UserList.add(lisi);
//返回ModelAndView
ModelAndView modelAndView=new ModelAndView();
//此方法相当于request的setAttribut,这样就可以在jsp页面通过UserList取数据了
modelAndView.addObject("UserList",UserList);
//指定视图
modelAndView.setViewName("test");
return modelAndView;
}
}
controller方法的返回值
1、返回ModelAndView
方法结束时,定义ModelAndView,将model和view分别进行设置。
2、返回string
如果controller方法返回的是string,表示返回逻辑视图名
视图(jsp路径):前缀+逻辑视图名+后缀。也就是modelAndView.setViewName("/test")的参数。
实例:
public String test(Model model)throws Exception{
model.addAttribute("z","y");
return "/test";
}
正常return是请求转发,重定向需要这么写:return "redirect:加上RequestMapping的值"(要写.action)
页面转发就是将redirect换成forward。
3、返回void
在controller方法形参上可以定义request和response,可以使用request或response指定响应的结果。