最近开始学习Struts2框架,想把之前传统的servlet/jsp实现的MVC架构转化为Struts2框架的过程写下来,以备以后回顾。
这里会借鉴到其他大神的博客内容,方便理解。
首先看一下传统的显示:
jsp界面代码:
$.ajax({
type : "POST", //提交方式
url : "AccountServlet", //相当于form表单中action
data : {
}, //相当于form表单中元素,多个参数用逗号隔开,注意最后一个参数值之后没有任何符号
dataType : "JSON", //标识返回的数据类型,值有json和text
success : function(msg) { //当访问请求成功返回后,由该方法进行处理
//msg参数表示返回的值
console.log(msg);
},
error : function(msg) { //当访问请求失败时,由该方法进行处理
alert("用户业务请求失败" + msg);
}
});
对应的AccountServlet里面的代码:
public class AccountServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session =req.getSession();
User user =(User)session.getAttribute("loginUser");
System.out.println("输出一下"+user.getId());
List<MoneyAccount> list=new AccountDaoImpl().all(user.getId());
//还要返回一个数据
ObjectMapper mapper=new ObjectMapper();
String info =mapper.writeValueAsString(list);
System.out.println(info);
PrintWriter out =resp.getWriter();
out.print(info);
out.flush();
out.close();
}
}
web.xml代码:
<servlet>
<description></description>
<display-name>AccountServlet</display-name>
<!-- 给Servlet类起一个别名 -->
<servlet-name>AccountServlet</servlet-name>
<!-- Servlet类的完整路径 -->
<servlet-class>servlet.AccountServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 要访问的别名 -->
<servlet-name>AccountServlet</servlet-name>
<!-- 设定访问某个Servlet的访问路径 -->
<url-pattern>/AccountServlet</url-pattern>
</servlet-mapping>
这样看来,servlet 获取请求数据,处理业务逻辑,分发转向 几个功能为一体,不利于维护。
总的来说,struts 框架mvc 实现低耦合,便于程序的维护,配置文件控制流程的转向 ,很清晰,控制器主要负责具体业务的实现
第一步:
先导Struts2的jar包,自行去网站下载,或者:https://download.csdn.net/download/weixin_42120561/11453171
第二步:配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<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>*.action</url-pattern>
</filter-mapping>
</web-app>
第三步:在jsp界面发出请求
$.ajax({
type: "POST", //提交方式
url: "score.action", //相当于form表单中action
data:{
current : currVal,
rows : rowsVal
}, //相当于form表单中元素,多个参数用逗号隔开,注意最后一个参数值之后没有任何符号
dataType :"JSON", //标识返回的数据类型,值有json和text
success:function(msg){ //当访问请求成功返回后,由该方法进行处理
//msg参数表示返回的值
},
error:function(msg){ //当访问请求失败时,由该方法进行处理
alert("aaa业务请求失败"+msg);
}
});
4.在struts.xml里面写上score.action对应的方法。这里就是org.zhuao.controller.HelloController类里的score方法。
<action name="score" class="org.zhuao.controller.HelloController" method="score">
<result name="suc" type="json">
<param name="root">jsonScore</param>
</result>
</action>
5.写Action类的方法,也就是org.zhuao.controller.HelloController类里的score方法。
private String current;
private String rows;
private JSONObject jsonScore;
public String score() {
HttpServletResponse response=ServletActionContext.getResponse();
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session =request.getSession();
...
JSONObject data=new JSONObject();
data.put("symbol", true);
System.out.println(data.toString());
jsonScore=data;
return "suc";
}
这边会返回一个"suc"字符串,对应的是struts.xml里面的result。jsp界面也就会接收到jsonScore。
只是起到复习回顾的作用,顺手上传一个小工程,因为上述的struts.xml等等代码不全,以供参考。
https://download.csdn.net/download/weixin_42120561/11453342