现在还是有很多老的项目用的是struts1.x,这几天看了韩顺平的struts视频,也做了一些笔记。
Struts入门
1.为什么有struts?
因为我们对MVC的理解不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展效率。
2.struts原理
3.手写版的struts登录系统
(1)先建立一个web工程,将struts开发的jar包(可以再struts官网上下载,核心是struts-core-1.3.10.jar)复制到lib中
(2)编写login.jsp界面
(3)编写ActionForm(表单)和action(小队长——> 登录小队长)
UserForm:需要继承ActionForm类,定义属性时应该与jsp页面的控件名(name)相同,(表单属性名一般与jsp控件名相同,也可以不同,但是必须保证get/set方法与控件名一一对应);
LoginAction:需要继承Action类,重写excute方法,类似于servlet的doPost/doGet方法;把form转成对应的UserForm
UserForm userForm=(UserForm)form;
Return mapping.findForward("ok");
(4)建立并配置struts-config.xml(一般放在WEB-INF文件夹下)(Struts-config.xml配置详解)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <!--配置表单--> <form-beans> <form-bean name="userform" type="com.itime.form.UserForm"/> </form-beans> <!-- 配置action --> <action-mappings> <!-- name将form 与 action相关联;type是全路径;scrope="request" or "session" 默认为session --> <action path="/login" name="userform" type="com.itime.action.LoginAction"> <forward name="ok" path="/WEB-INF/ok.jsp"></forward> <forward name="err" path="/WEB-INF/err.jsp"></forward> </action> </action-mappings> </struts-config> |
(5)编写ok.jsp和err.jsp
(6)配置web.xml(该文件用于配置ActionServlet)
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet>
<servlet-mapping> <servlet-name>action</servlet-name> <!-- 是*.do的请求,都交给总控制器 --> <url-pattern>*.do</url-pattern> </servlet-mapping>
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> |
(7)测试
(8)其他:
a.在用户登录成功界面,显示登录成功人的名字。(使用过滤器配合struts解决中文乱码问题)
Action属性scope="request"
在ok.jsp页面,引用包,
<% UserForm userform= (UserForm)request.getAttribute("userform"); out.print("您好!"+userform.getUsername()); %> 或者 <%=((UserForm)request.getAttribute("userform")).getUsername() %> |
用过滤器filter处理中文乱码:
浏览器-->web服务器-->filters-->ActionServlet-->
建立一个过滤器,实现接口Filter(javax.servlet.Filter)
package com.itime.filters;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class ChineseFilter extends HttpServlet implements Filter {
@Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { arg0.setCharacterEncoding("utf-8");//设置字符编码 arg2.doFilter(arg0, arg1);//必须要有,不然的话就停止前进 } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } |
在web.xml中配置:
<filter> <filter-name>chineseFilter</filter-name> <filter-class>com.itime.filters.ChineseFilter</filter-class> </filter> <filter-mapping> <filter-name>chineseFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
b.每个action都是单态的,包括总控制器ActionServlet(2.0有改进)。
单态:是指在整个程序运行的过程中,始终是一个对象(对并发有影响)。
c.struts-config.xml不一定非得放在WEB-INF文件夹下,并且可以有多个,只需在web.xml文件下配置好即可。
d.添加到数据库去验证该用户是否合法。
4.使用工具完成struts开发
(一)用工具导入struts包,自动完成相关配置,我们手工配置struts-config.xml文件即可
步骤如下:
(1)建立工程,右击工程名-----myEclipse——>Add struts Capabilities
(2)编写login.jsp
(3)编写ActionForm和Action
(4)手动配置struts-config.xml
(5)编写ok.jsp和err.jsp
(6)测试
(二)完全依赖myEclipse工具开发
步骤如下:
(1)创建web工程,引入struts开发包
(2)编写login.jsp
(3)开发ActionForm和action(在struts-config.xml中用图形界面开发)
(4)开发ok.jsp和err.jsp(同样可以用图形界面生成)
(5)在Action中添加业务逻辑判断
(6)测试
5.struts是一个web层的框架
首先介绍一下model2
从图中看出web层就是V 和 C;
对于struts:
所以说, struts是web层框架。