SSH = Struts2+Spring+Hibernate
1.Hibernate:持久层
2.Struts2:控制层
3.Spring:容器,总管家
JavaWEB:M(model)V(view)C(control)
Struts2:核心过滤器拦截所有请求,然后会有一系列的拦截器去做一些系统级别的功能,
例如:页面参数的绑定,类型转换,验证,文件的上传下载,国际化,ognl表达式
就会继续将请求定位到各自业务的处理,我们叫它action
一、开发步骤:
1.加载jar包
2.在web.xml中加载struts2的核心拦截器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.在src目录下编写一个struts2的核心配置文件,名字固定:struts.xml
<struts>
<package name="my" namespace="/" extends="struts-default">
<action name="login" class="com.action.LoginAction">
<result name="success">/index.jsp</result>
<result name="input">/error.jsp</result>
</action>
</package>
</struts>
4.编写一个action继承ActionSupport,重写execute方法。
(1)通过属性注入的方式,即直接在action里面写。
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception{
if(getName().equals("zhangsan")&&getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
(2)通过实体类的注入,即把属性封装,然后在调用。在调用实体类的时候,实体类也需要set和get方法。
User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception{
if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
login.jsp文件
<form action="login" method="post">
姓名:<input type="text" name="user.name"/><br/>
密码:<input type="password" name="user.password"/><br/>
<input type="submit" value="submit"/>
public class LoginAction extends ActionSupport implements ModelDriven<User> {
User user = new User();
public String execute() throws Exception{
if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
login.jsp文件
<form action="login" method="post">
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="submit"/>
1.Hibernate:持久层
2.Struts2:控制层
3.Spring:容器,总管家
JavaWEB:M(model)V(view)C(control)
Struts2:核心过滤器拦截所有请求,然后会有一系列的拦截器去做一些系统级别的功能,
例如:页面参数的绑定,类型转换,验证,文件的上传下载,国际化,ognl表达式
就会继续将请求定位到各自业务的处理,我们叫它action
一、开发步骤:
1.加载jar包
2.在web.xml中加载struts2的核心拦截器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.在src目录下编写一个struts2的核心配置文件,名字固定:struts.xml
<struts>
<package name="my" namespace="/" extends="struts-default">
<action name="login" class="com.action.LoginAction">
<result name="success">/index.jsp</result>
<result name="input">/error.jsp</result>
</action>
</package>
</struts>
4.编写一个action继承ActionSupport,重写execute方法。
(1)通过属性注入的方式,即直接在action里面写。
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception{
if(getName().equals("zhangsan")&&getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
(2)通过实体类的注入,即把属性封装,然后在调用。在调用实体类的时候,实体类也需要set和get方法。
User user = new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception{
if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
login.jsp文件
<form action="login" method="post">
姓名:<input type="text" name="user.name"/><br/>
密码:<input type="password" name="user.password"/><br/>
<input type="submit" value="submit"/>
</form>
public class LoginAction extends ActionSupport implements ModelDriven<User> {
User user = new User();
public String execute() throws Exception{
if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
return "success";
}
else{
return "input";
}
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
login.jsp文件
<form action="login" method="post">
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="submit"/>
</form>
二、action中如何获取servletAPI
1.解耦合
struts2把servletAPI封装成了Map对象,这些对象只能实现数据的存储和传递功能,好处是方便测试,不需要启动服务器即可测试
a。是通过actionContext
Map request = (Map) ActionContext.getContext().get("request");
b。实现特定的接口:RequestAwear,SessionAwear....重写set方法完成注入,在方法中直接使用这些对象即可
2.耦合
如果要使用原有的servletAPI就必须获取这些原对象
和上面的方式类比,就是加一个servlet前缀即可
HttpServletRequest req = ServletActionContext.getRequest();