@Controller
@Scope("prototype")
//@RequestMapping("/UserController")
public class UserController {
User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String regist(){
return "";
}
public String logIn(){
System.out.println(user.getUserName()+"->"+user.getPassword());
//System.out.println("User:"+userName + " Password:" +password);
return "welcome";
}
}
//实体类
public class User {
private String userName;
private String password;
public User(String userName, String password) {
super();
this.userName = userName;
this.password = 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;
}
@Override
public String toString() {
return "User [ userName=" + userName + ", password=" + password + "]";
}
}
//index.jsp
<body>
<form action = "User_logIn" method ="post" ><!-- namespace= "/" -->
用户名:<input type="text" name="user.userName"/>
密 码:<input type="password" name="user.password"/>
<button οnclick= "Submit()">提交</button>
</form>
</body>
</html>
//struts.xml
<package name="user" extends="struts-default" namespace="/" strict-method-invocation="false">
<action name="User_*" class="userController" method="{1}">
<result name="welcome">/view/welcome.jsp</result>
<!-- <result name="input">index.jsp</result> -->
</action>
</package>
//applicationContext.xml
<!-- 开启包扫描,并注册注解 -->
<context:component-scan base-package="me.*"/>
点击提交按钮之后,报空指针异常。
找了好久,找不到问题的出在哪里。终于在网上看到大牛说:
<strong>struts实例化时,是通过反射调用无参构造方法,如果这个实体没写任何构造方法,不会报错,但是只写有参数的构造方法,实体不能实例化,就会出现控指针异常。</strong>
因此,删掉了实体的有参构造函数之后,就正常了,或者在原有实体类的基础上再写一个无参构造函数。