SSH学习(个人笔记)

在学习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做了比较

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章