一:什么是struts2?
Struts2是开源,免费,轻量级的mvc框架。
(轻量级指的是框架没有侵入性,(侵入性打个比方就是,我买了你公司的一个产品,我还必须把这个产品在你的平台上运行,离了你的平台就废了。))虽然这个框架现在没有那么用处多了,但是还是值得一学的,多一个知识不碍事。
二:struts2框架入门之配置环境。
要使用struts2框架就得下载资源包,当然有互联网可以去官网下载。官网地址
然后我们在官网或者其他渠道下载好Struts2包之后就可以解压安装。我用的是
然后解压,解压完进入文件夹找到
这是个空项目,我们导入架构包就从这个里面找,解压这个,解压完进入
这些就是架构必须包,把它们一网打尽(是全选复制到项目的lib中)
三:实现一个简单的Struts2的输出案例,顺便看看配置文件
首先我们建立一个项目注意是web项目
建好后导包(上面那些必须的包),然后我们需要配置2个文件,
2个xml文件,一个是web,xml,一个是struts2的文件(文件名为struts.xml名字千万不能错)。
struts的配置文件在src目录下。
web的xml在webContent-web-inf下,
先说下web的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_9" version="2.4">
<filter>
<filter-name>struts2</filter-name>
<!-- 这个class在左边的web app libraries下的 struts2-core-核心(奶瓶那样的)-->
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
下面是class属性的位置,复制一下路径,
然后我们需要创建一个原类,也就是基本类
然后是原类的定义
需要注意的是:类中的属性名必须和jsp界面的传的name一致,不然传值会找不到,同时这个属性也要set属性,不然赋值失败
package cn.oracle.pojo;
/*Struts2的第一个案例*/
public class LoginAction {
private String name;
/*在Struts中所有业务方法都是public的,返回值都为字符串,所有的业务方法都没参数,
* 方法名可以自定以,默认为execute*/
public void setName(String name) {
this.name = name;
}
//这个方法名默认,千万不能写错。不然报错误,返回值规定为String,同时方法不能有参数
public String execute() {
if("tom".equals(name)){
return "success";
}
return "error";
}
//下面的方法是另外的,就是指定用哪个方法的那边
public String login() {
//获取request
HttpServletRequest request=ServletActionContext.getRequest();
String name=request.getParameter("name");
String password=request.getParameter("password");
System.out.println("账号"+name+",密码"+password);
UserService users=new UserServiceImpl();
boolean ok=users.login(name, password);
if(ok){
request.setAttribute("name", name);
return "success";
}else{
request.setAttribute("message", "账号或者密码错误");
return "error";
}
}
//注册
public String resiger() {
//获取request
HttpServletRequest request=ServletActionContext.getRequest();
String name=request.getParameter("name");
String password=request.getParameter("password");
System.out.println("账号"+name+",密码"+password);
UserService users=new UserServiceImpl();
boolean ok=users.resiger(name, password);
if(ok){
//注册成功
request.setAttribute("name", name);
return "chance";
}else{
request.setAttribute("message", "账号或者密码错误");
return "error";
}
}
接下来我们需要3个jsp文件,(我这里偷懒了用了2个jsp),一个界面是传值给我写的这个类,一个是我这个类方法执行后去的界面,
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="LoginAction.action" method="post">
用户名:<input type="text"name="name"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
我这个JSP通过form表单传值给我的java类,当然在struts里面后坠是action
然后我们需要配置一下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">
<!--如果没有标签提醒我们可以建立一下dtd的约束,方法为,window,preference-xml-xmlCatalog,右边add,然后key是复制的链接http://struts.apache.org/dtds/struts-2.3.dtd,上面那个File System找到你的dtd安装路径-->
<struts>
<!-- package:包 strut2使用package来组织模块
name 属性:必须,用于其他的包应用当前包
extends:当前包继承哪个包,继承的包默认是struts-default,这是个xml文件,在左边的web app libraries中的
struts2的核心奶瓶点开的最底下有,里面包含了N多属性和方法 -->
<package name="default" extends="struts-default">
<!-- <default-action-ref name="error"></default-action-ref>-->
<!-- 配置action 其实就是配置url和处理类的方法进行映射 -->
<!-- action的名字自己取的我这里是为了省麻烦所以跟java类保持一致,class是路径 -->
<action name="LoginAction" class="cn.oracle.pojo.LoginAction">
<!-- 注意这里result要写在action之内,同时result的name要和java类中方法返回的数值一样 -->
<result name="success">suc.jsp</result>
<result name="error">suc.jsp</result>
</action>
<!--如果你想换个指定的方法,不用默认的可以加一个新的action 或者在旧的上面更改,具体如下-->
<!--这里method属性指的是name的那个*号,然后界面传值我们需要除了指定目的action外还需要加一个方法名,类似这样LoginAction_login.action,,这个_后面的就是方法名指定的
<action name="LoginAction_*" class="cn.oracle.pojo.LoginAction" method="{1}">
<!-- 注意这里result要写在action之内,同时result的name要和java类中方法返回的数值一直 -->
<result name="success">/suc.jsp</result>
<!-- dispatcher是转发 redirect是重定向-->
<result name="error" type="dispatcher">/Login.jsp</result>
<!-- 注册成功重定向到login.jsp type不写默认是转发 -->
<result name="chance" type="redirect">/Login.jsp</result>
</action>
</package>
</struts>
我这里偷懒所以返回和失败都是一个界面suc,.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<title>Struts第一个案例</title>
<h1>hello w orld </h1>
</body>
</html>
运行效果图:
总结下配置中的错误:
异常:
网上查了半天是因为我的方法名写错了,跟默认的方法名错了一个字母
2.JSP界面无响应就是报404,然后解决方法是先把jsp界面加载到服务器上,然后就找到了该界面。
3服务器本地错误,这个错误是说由于Eclipse异常关闭,导致的服务没停,服务器无法再次启动。。。
所以解决方案只能重启了一次。。。