SSH框架之struts

三层架构相当于MVC中的model层。而servlet充当控制器
设计模式是针对请求与相应的
MVC是在三层架构的基础上的

Strutc2是针对mvc设计模式的一套框架(所谓的框架是一种重复使用的解决方案)
Struts1的耦合度不好,里面有许多servlet
而在struts2中,其是将servlet都封装了

优点:
Struts2servletAPI进行了解耦,即对servlet进行了封装
Struts2提供了拦截器,使用的是AOP编程
Struts提供了类型转换器
开发struts的应用的程序
需要下载struts的jar包

下载地址:https://archive.apache.org/dist/struts/2.3.37/struts-2.3.37-all.zip

Apps目录,struts2提供的实例应用
Docs struts2文档
Lib jar包
Src 源程序

Struts2-core-xxx.jar struts2框架的核心库
Xwork-xxx.jar xwork类库,struts2的构建基础
Ognl-xxx.jar struts2使用的一种表达式语言库
Commons-fileupload-xxx.jar struts文件上传依赖包

继承Action接口开发
SUCCESS常量被定义,在不使用接口时,不能进行常量返回

在这里插入图片描述
第三种开发方式
推荐使用
继承ActionSupport,推荐使用,并且ActionSupprot在struts中如果没有配置相应的action类,那么struts默认就会调用ActionSupport这个类去处理
name=“user.userid” name="user.password"
login.jsp

<div class="form-group">
								<div class="field field-icon-right">
									<input type="text" class="input input-big" name="user.userid"
										placeholder="登录账号" data-validate="required:请填写账号" /> <span
										class="icon icon-user margin-small"></span>
								</div>
							</div>
							<div class="form-group">
								<div class="field field-icon-right">
									<input type="password" class="input input-big" name="user.password"
										placeholder="登录密码" data-validate="required:请填写密码" /> <span
										class="icon icon-key margin-small"></span>
								</div>
							</div>

						</div>
						<div style="padding: 30px;">
							<input type="submit"
								class="button button-block bg-main text-big input-big"
								value="登录">
						</div>

UserAction.java

private List<UserInfo> userinfo;
	private int userid;
	
	
	public int getUserid() {
		return userid;
	}

	public void setUserid(int userid) {
		this.userid = userid;
	}

	public List<UserInfo> getUserinfo() {
		return userinfo;
	}

	public void setUserinfo(List<UserInfo> userinfo) {
		this.userinfo = userinfo;
	}

	public String execute(){
		UserInfoService userservice=new UserInfoServiceImpl();
		userinfo=userservice.getUser();
		for(Object o:userinfo){
			UserInfo user=(UserInfo) o;
			System.out.println(user.getId()+user.getName()+user.getPassword());
		}
		return SUCCESS; 
	}

在jsp页面里面,每个表单的属性名是 实体类名.属性名
在这里插入图片描述

在返还的jsp页面中,其保证属性名相同即可获取到数据:

<c:forEach items="${booklist }" var="book">
    <tr>
      <td>${
    
    book.id }</td>      
      <td>${
    
    book.name }</td>  
      <td><img src=${
    
    book.info } ></td>      
      <td>
public String execute(){
    
    //该方法是约定俗成的,返回值未success  必须要使用这个方法
		
		if(user.getUserid().equals("admin")&&user.getPassword().equals("123")){
    
    
			//需要servlet的接口来实现session
			//首先获取action的上下文对象
			ActionContext actioncontext=ActionContext.getContext();
			Map<String,Object> sessionmap=actioncontext.getSession();//map是键值对的形式
			//获取session的对象,存储了所有的session集合
			sessionmap.put("username", user.getUserid());
		return SUCCESS;
		}else{
    
    
			return "relogin";
		}
	}

将Action的数据传递给jsp页面,通过Servlet里面的api的接口(对象)来实现

通过HttpSession Cookie HttpServletRequest HttpServletResponse

其余的request与cookie等都可以ActionContext来获取

对于Action的总结

其将需要页面提交处理的数据

处理页面发给服务器的数据
将服务器的数据转移到页面的桥梁
充当的是指向哪个数据页面,或者说是指向哪个action
开发方式
直接方式,普通的java类,类中的方法有一个返回的字符串
继承Action接口的

.struts中的package的说明

Package是把功能相似的action 组织在一起。方便使用namespace 就是访问的路径

Actionn元素之method属性

针对同一模块的不同功能 增删改查

Method是针对同一个action中,为了减少action的开发数量

http://localhost:8080/LibraryBook/admin/user_delete!delete.action

要想运行动态方法配置需要在struts.xml中配置允许配置动态方法

Java的方法

public String add(){
    
    
		return SUCCESS;
		
	}
	public String detail(){
    
    
		return SUCCESS;
		
	}
	public String search(){
    
    
		return SUCCESS;
		
	}
	public String delete(){
    
    
		return SUCCESS;

struts的配置

<package name="admin" namespace="/admin" extends="struts-default"><!-- namespace 访问路径 -->
        <action name="userlist" class="LibraryAction.UserAction">
       		<result  name="success">/book.jsp</result>
       		
        </action>
        <action name="user_add" class="LibraryAction.UserAction" method="add">
        	<result name="success">/adduser.jsp</result>
        </action>
        <action name="user_delete" class="LibraryAction.UserAction" method="delete">
        	<result name="success">/deleteuser.jsp</result>
        </action>
        <action name="user_detail" class="LibraryAction.UserAction" method="detail">
        	<result name="success">/detailuser.jsp</result>
        </action>
        <action name="user_search" class="LibraryAction.UserAction" method="search">
        	<result name="success">/searchuser.jsp</result>
        </action>
    </package>

http://localhost:8080/LibraryBook/admin/user_delete!delete.action

Method 方便动态方法的调用,利于开发

通配符的使用
通配符的配置,为了减少在struts中的action配置的数量
需要在开发时约定一个命名规则,比如action的name名字
User_方法名

<action name="user_*" class="LibraryAction.UserAction" method="{1}">
        	<result name="success">/{
    
    1}user.jsp</result>
        </action> 

*注意:就是从左到右的占位符,这个占位符一般就是在action中 放入name中配置,后面表示占位符的内容就用{1}等来表示,占位符的位置从1开始

404

当一个请求路径无效时,会默认跳转到action 404处理,使用默认的action来处理,实现方式:
实现方式:

在这里插入图片描述

<package name="default" namespace="/" extends="struts-default"><!-- namespace 访问路径 -->
    	<default-action-ref name="defaultaction"></default-action-ref>
	    <action name="login" class="LibraryAction.LoginAction">
       		<result type="redirect" name="success">/index.jsp</result>
       		
       		<result name="relogin">/login.jsp</result>
       		
        </action>
        <!-- 默认的action处理 -->
        <action name="defaultaction">
        <result >/404.jsp</result>
        </action>
        
    </package>

请求乱码处理方式

<constant name="struts.i18n.encoding" value="utf-8"></constant>

猜你喜欢

转载自blog.csdn.net/pengxiang1998/article/details/105532792
今日推荐