在学习SSH框架之前,首先需要熟悉servlet,然后再去替代它。
Struts:
教程:
part1 基础配置
首先去官网下载Struts,下载这个大小为65MB的
压缩后,就可以将其中的lib中的jar导入了,其实不用全部导入,常见的jar包如下:
然后就是编写代码了,
首先去web.xml配置filter,加入以下配置,这个filter配置是第一步,但是目前以我短浅的学习暂时不能说出它的作用
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
接着,假设我们有一个html页面了,页面里有一个表单,表单的action属性跳转到一个链接,这个添加填上myAction,于是我们再建一个java类,名字就是myAction, extends ActionSupport,然后实现excute方法,该方法返回String值,和struts.xml中相对应。当然,光是编写了一个myAction的类是不能将表单的链接和类关联起来的,还需要struts.xml文件,其实如果熟悉servlet的xml配置,原理都差不多
html界面的表单写法
<form action="<%=request.getContextPath() %>/loginAction" method = "post">
用户名:<input type = "text" name = "userName"/><br/>
密码:<input type="password" name = "password"/><br/>
<input type="submit" value="登录"/>
struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置包名,便于区分 namespace直译是命名空间,作用是绑定url前缀,即在访问页面时该加什么前缀 -->
<package name="mypackage" extends="struts-default" namespace="/">
<!-- action的名字 对应哪一个类 method属性指定调用类中的哪个方法处理 -->
<action name="loginAction" class="com.bowen.controller.MyAction" method="excute">
<!--配置方法的返回值-->
<result name="success">/index.jsp</result>
<result name = "fail">/login.jsp</result>
</action>
</package>
</struts>
对于该配置文件中的result标签,它的name与你编写的excute方法的返回值相对应,标签内部指定跳转的地址
result标签还可以指定跳转类型,比如重定向,或者再跳转到一个action:
<result name="success" type="redirect">/index.jsp</result>
<result name = "fail" type="chain">action2</result>
之前用过servlet都知道,解决中文乱码要加上几句话,而struts中则是在web.xml配置文件中加入
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
part 2 参数传递问题
在传统的servlet中我们采用request和response传递参数,但是struts2如果想用同样的方式传递参数,可以:
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse resp = ServletActionContext.getResponse();
获取request和response,再getAttribute,但实际上还有其他方式
我们一般使用ModelDriven接口,在编写的action类里继承ModelDriven,然后实现getModel方法,具体的可以参考下面的网址,毕竟我也是初学者,没有别人讲的好,而modelDriven背后的机制又特别迷惑,目前我只能停留在应用的阶层。
https://blog.csdn.net/weixin_39220472/article/details/80296890
此外,我们还需要request,response等对象,而在struts中,所有的这些对象都被集中在ActionContext中,你想要的对象它应有尽有,可以这样获得一个想要的对象
Map<String, Object> session = ActionContext.getContext().getSession();
可以看出它就是一个Map,可以通过put的方法来存值
session.put("name", "Tom");
之后就是ognl表达式和struts标签了,和jstl表达式类似,但是又不一样
https://www.cnblogs.com/mingforyou/p/4483945.html
上面的博客可以快速入门,如何使用struts标签,将它和jstl做了比较