接着昨天,今天又写了一个基于注解的spring mvc的例子,里面也存在很多的疑问,欢迎大家解答,非常感谢!不多说,直接上码了.
web.xml
<servlet>
<servlet-name>DispatcherServlet</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>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
applicationContext.xml
<!-- 让Spring启用对annotation的支持 -->
<context:annotation-config></context:annotation-config>
<!--<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="utf-8" />-->
<bean id="login" class="org.yonge.model.Login"></bean>
<!--<bean id="loginAction" class="org.yonge.action.LoginController"></bean>-->
<!-- 下面的配置可以读取hibernate.properties文件内容
<context:property-placeholder location="classpath:/hibernate.properties" />
-->
<!-- 为什么下面的定义都可以不需要? -->
<!-- 自动扫描org.yonge路径下的所有文件,并根据注解完成注入的工作 -->
<context:component-scan base-package="org.yonge"></context:component-scan>
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property> <!-- 视图文件的前缀 -->
<property name="suffix" value=".jsp"></property> <!-- 视图文件的后缀名 -->
<!-- view是用什么显示,这里是jsp,还可以用velocity之类的 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
</bean>
控制器
@Controller
//@Scope("prototype")
@RequestMapping("/loginAction.do")
public class LoginController {
@Resource(name="login") //根据名称注入
@Autowired //自动装配,如果没有,Login对象中的属性是不会注入
private Login login;
//不用下面的get/set方法也可以自动注入
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
// @RequestMapping() //注意:方法上必须要有此注解,
//否则会抛异常:javax.servlet.ServletException: No adapter for handler [org.yonge.action.LoginController@10202aa]:
//Does your handler implement a supported interface like Controller?
public String load(HttpServletRequest request, ModelMap modelMap, Login login)
{
// modelMap.put("userName", request.getParameter("userName"));
// modelMap.put("passWord", request.getParameter("passWord"));
System.out.println("userName:"+login.getUserName());
System.out.println("passWord:"+login.getPassWord());
modelMap.put("loginModel", login);
return "ok";
}
public String load(ModelMap modelMap)
{
return "ok";
}
@RequestMapping()
public String load(HttpServletRequest request, ModelMap modelMap)
{
// modelMap.put("userName", request.getParameter("userName"));
// modelMap.put("passWord", request.getParameter("passWord"));
System.out.println("Login Object:"+login.toString());
System.out.println("userName:"+login.getUserName());
System.out.println("passWord:"+login.getPassWord());
modelMap.put("loginModel", login);
return "ok";
}
// @RequestMapping() //如果用注解,此方法为什么不能运行 异常信息: argument type mismatch
//如果不用注解的形式,此方法是可以正常执行的
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
System.out.println("注解形式,执行4个参数方法");
Login login=(Login) command;
System.out.println("UserName:"+login.getUserName());
System.out.println("PassWord:"+login.getPassWord());
//第一种传值及显示
// request.setAttribute("userName", login.getUserName());
// request.setAttribute("passWord", login.getPassWord());
// return new ModelAndView("ok");
//第二种传值及显示
// return new ModelAndView("ok","loginModel",login);
//第三种传值及显示
Map mapModel=new HashMap();
mapModel.put("loginModel", login);
return new ModelAndView("ok",mapModel);
}
}
首页
<form action="./loginAction.do" method="get">
<table align="center" width="50%" border="0">
<tr>
<td>UserName:</td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td>PassWord:</td>
<td>
<input type="text" name="passWord">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit"" value="提交">
</td>
</tr>
</table>
</form>
跳转页面
<body><!--
登录成功!!!
UserName:${userName }
PassWord:${passWord } -->
UserName:${loginModel.userName }
PassWord:${loginModel.passWord }
</body>
Model
public class Login {
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;
}
}
疑问:
1、控制器中处理请求的方法,有哪些定义形式?
2、applicationContext.xml文件中至少需要定义些什么内容?什么时候需要定义上面所说的?
感受:
1、如果熟练,开发速度较快
2、太过灵活
分享到:
相关推荐
Spring通过代理模式实现AOP,有基于代理和基于注解两种方式。开发者可以通过定义切面、通知(advice)和切入点(pointcut)来实现横切关注点。 9. **Spring的安全管理** Spring Security(原Acegi Security)为...
4. **Criteria查询**: 提供了一种面向对象的方式来执行SQL查询,无需编写SQL语句。 5. **HQL(Hibernate Query Language)**: Hibernate自己的查询语言,类似于SQL,但面向对象。 6. **懒加载(Lazy Loading)**: ...
ITCast OA是一款基于SSH(Struts2、Spring、Hibernate)技术栈开发的企业级办公自动化系统,它在2011年由ITCast团队推出的新版本,相较于之前的版本,具备更先进的功能特性和优化的性能。SSH框架的组合运用,使得该...
Spring框架中的DI允许在运行时通过配置或注解来注入依赖,实现对象之间的松耦合。 6. **Hibernate与JDBC对比** Hibernate是一个对象关系映射(ORM)框架,相比JDBC,它提供更强大的面向对象的API,简化了数据库...