第一个struts程序的配置过程

然后输入project-name,比如说“test",点finish,配置web.xml,这里的org.apache.struts.action.ActionServlet就在struts-core-1.3.10.jar中,在后面的步骤中我们要把这些jar包拷贝到WEB-INF/lib中
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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_2_5.xsd" version="2.5"> <servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
配置server.xml(%CATALINA_HOME%\conf\server.xml),添加一个虚拟路径:
<Context path="/test" docBase="E:\web.workspace\test\WebContent" reloadable="true"/>
然后把struts的所有jar包拷贝到你的WEB-INF/lib中,对于我当前的情况,就是把
F:\_tools\java_libs\struts1.x\struts-1.3.10-all\struts-1.3.10\lib
给拷贝到了
E:\web.workspace\test\WebContent\WEB-INF\lib
然后:

你再看:现在Web App Libraries中出现了你拷贝到WEB-INF\lib中的jar包

当然,如果你还有别的需要的jar包用来在eclipse中编译一些java文件,比如servlet-api.jar和jsp-api.jar,那就通过project->properties->Java Build Path->Libraries->Add External JAR来添加,注意,这些jar包放到WEB-INF\lib中是不能帮助eclipse来编译java文件的,struts那些jar包是特例
现在你就写好你的java和各种页面文件,把java文件编译之后,拷贝到WEB-INF/classes里面即可,我这里就是:
From: E:\web.workspace\test\build\classes\struts\action\HelloAction.class
Copied to: E:\web.workspace\test\WebContent\WEB-INF\classes\struts\action\HelloAction.class
From: E:\web.workspace\test\build\classes\struts\form\HelloForm.class
Copied to: E:\web.workspace\test\WebContent\WEB-INF\classes\struts\form\HelloForm.class
写好了一个hello.jsp文件,一个HelloAction.java,一个HelloForm.java,1个hello.jsp文件,功能是:从一个text框输入信息,提交给hello.jsp,如果text框中内容为空,则在hello.jsp显示错误提示信息,如果text框中内容不为空,那么就在hello.jsp页面显示text框中输入的内容
HelloAction.java
package struts.action; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import struts.form.HelloForm; public class HelloAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
HelloForm helloForm = (HelloForm) form;// TODO Auto-generated method
String info = helloForm.getInfo(); // 所有的输入内容从ActionForm取出
request.setAttribute("msg", info); // 将信息设置在request范围之中
return mapping.findForward("show"); // 此处返回的是一个映射的路径
}
}
HelloForm.java
package struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage; public class HelloForm extends ActionForm { private String info; public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (this.info == null || "".equals(this.info)) { // info的输入内容为空
// 现在应该保存错误信息
errors.add("info", new ActionMessage("error.info"));
}
return errors;
} public void reset(ActionMapping mapping, HttpServletRequest request) {
} public String getInfo() {
return info;
} public void setInfo(String info) {
this.info = info;
}
}
hello.jsp(路径为:%docBase%/hello-struts/hello.jsp)
注意,这里的taglib在理论上来说,需要在web.xml中配置<taglib>节点来指明uri和.tld文件的映射关系,但是,因为在前面的步骤中,我们拷贝到WEB-INF/lib中有一个jar包名为“struts-taglib-1.3.10.jar”,这个jar包中有我们所需的.tld文件,并且,这些tld文件中已经定义好了我们可以使用的URI,因此,在这里我们直接用就行了,如果你不清楚应该用哪个uri,你去jar包里查看一下对应的tld文件的内容就可以找到了(在该jar包的META-INF\tld文件夹中)。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html:html lang="true">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<html:errors/>
<logic:present name="msg" scope="request">
<h2>${msg}</h2>
</logic:present>
<html:form action="/my-first-struts-program/hello.do" method="post">
请输入信息:<html:text property="info"></html:text>
<html:submit value="显示"></html:submit>
</html:form>
</body>
</html:html>
现在,我们需要配置WEB-INF/struts-config.xml,也就是指定我们上面写的Action和ActionForm的配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config>
<form-beans>
<form-bean name="helloForm"
type="struts.form.HelloForm" />
</form-beans> <global-exceptions />
<global-forwards />
<action-mappings>
<!--
attribute|name: 都是指定此Action要使用的ActionForm的name,跟<form-bean>中的name域一致
input: 当验证出错(ActionErrors不为空)时跳转到的错误处理页
path: 此Action对应的虚拟路径(uri)
scope: 此Action的作用范围,可以是request、session
type: 此Action对应的package、class-name
-->
<action attribute="helloForm" input="/hello-struts/hello.jsp"
name="helloForm" path="/my-first-struts-program/hello" scope="request"
type="struts.action.HelloAction">
<!--
name: 页面的uri
path: 页面的实际路径
-->
<forward name="show" path="/hello-struts/hello.jsp"></forward>
</action>
</action-mappings> <message-resources parameter="struts.ApplicationResources" />
</struts-config>
这里还需要说的就是,hello.jsp中action="/test/hello.do",之所以这样用,是因为<action>配置的path为/test/hello,而web.xml中配置的<url-pattern>为*.do
另一方面,<message-resouces>的parameter指出了我们的ApplicationResources.properties文件的位置:E:\web.workspace\test\WebContent\WEB-INF\classes\struts\ApplicationResources.properties
其内容如下,当提交的信息为空的时候,显示"error.info"指定的信息:
# 输入的信息不能为空!
error.info = \u8f93\u5165\u7684\u4fe1\u606f\u4e0d\u80fd\u4e3a\u7a7a\uff01
测试1:输入的信息为空,直接提交

测试2:输入一些信息,提交,用filter给request和response做一下setCharacterEncoding("UTF-8"),解决编码问题


filter代码如下:
package org.inf.filters; import java.io.IOException;
import java.nio.charset.Charset; 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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean enable = false;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (this.enable) {
String encoding = this.selectEncoding(request);
if (encoding != null && !encoding.equals("")) {
System.out.println("~~" + this + ": request :" + encoding);
request.setCharacterEncoding(encoding);
}
}
// Pass control on to the next filter
chain.doFilter(request, response);
if (this.enable) {
String encoding = this.selectEncoding(request);
if (encoding != null && !encoding.equals("")) {
System.out.println("~~" + this + ": response :" + encoding);
response.setCharacterEncoding(encoding);
}
}
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
if (!Charset.isSupported(encoding)) {
encoding = null;
}
String enableString = filterConfig.getInitParameter("enable");
if (enableString.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
web.xml配置:
<filter>
<filter-name>encoding</filter-name>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
<filter-class>org.inf.filters.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第一个struts程序的配置过程的更多相关文章
- [转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法, ...
- 通过搭建一个精简的C语言开发环境了解一个C程序的执行过程
一.如何搭建一个精简的C语言开发环境 准备:下载TC2.0,并解压,比如说“d:\tc2.0\tc”目录 1.在C盘建立一个目录minic c:\ md minic 2.从解压的目录中将以下文件拷贝到 ...
- 一个Java程序的执行过程(转)
我们手工执行java程序是这样的: 1.在记事本中或者是UE的文本编辑器中,写好源程序: 2.使用javac命令把源程序编译成.class文件: 编译后的.class(类字节码)文件中会包含 ...
- 第一部分 记事本搞定第一个C#程序和编译过程剖析
记事本搞定第一个C#程序 进行下面三个步骤:编码,编译和托管运行. 1.记事本进行编码: using System; class Program{ public static void Main() ...
- [原创]java WEB学习笔记04:Servlet 简介及第一个Servlet程序(配置注册servlet,生命周期)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 我的第一个Struts程序
1.程序结构 2.各种文件 LoginAction.java package com.tfj.action; public class LoginAction { private String use ...
- 一个C#程序的执行过程
可能很多人都知道我们把程序打包成dll就丢出去了,但是里面的具体的执行过程是怎么样的呢. 程序集是由元数据和IL组成的.IL是和CPU无关的语言,是微软的几个专家请教了外面的编译器的作则,开发出来的. ...
- fpga配置过程(转载)
fpga 配置时序图如下 1.FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式. AS 由FPGA器件引导配置操作过程, ...
- SpringMVC_001 第一个SpringMVC程序
今天我们来学习第一个SpringMVC程序 一.配置开发方式 (1)首先建立一个SpringMVC web程序 (2)导入jar包 (3)建立UserController.java package ...
随机推荐
- win7 登录后只能使用“临时配置文件”,原来的配置文件无法启用!
这个问题,修改注册表就可以解决. 开始-> 运行-> 输入regedit,回车, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Cur ...
- SIT与UAT的分别
在企业级软件的测试过程中,经常会划分为三个阶段——单元测试,SIT和UAT,如果开发人员足够,通常还会在SIT之前引入代码审查机制(Code Review)来保证软件符合客户需求且流程正确.下面简单介 ...
- oracle 11g完美卸载
oracle 11g完美卸载 CreateTime--2018年4月22日17:07:19 Author:Marydon 对于oracle数据库的卸载,一定要卸载干净,否则,再次想装oracle时 ...
- 〖Android〗酷派手机固件.cpb文件的分解程序
/* * ===================================================================================== * * Filen ...
- ORA-27090 故障一例
近期的alert日志中碰到了ORA-27090的错误信息.其错误提示为Unable to reserve kernel resources for asynchronous disk I/O.依据这个 ...
- 身份证查询API
# -*- coding: utf-8 -*- #python 27 #xiaodeng #http://apistore.baidu.com/apiworks/servicedetail/113.h ...
- Filezilla开源FTP传输工具
生于忧患,死于安乐!在进取中思考... 官网:https://filezilla-project.org/ #FileZilla截图 免费.开源的FTP链接工具! 云下载: http://pan.ba ...
- linux利器expect的使用
1.什么是expect在做系统管理时,我们很多时候需要输入密码,例如:连接 ssh,连接ftp,那么如何能做到不输入密码,我们需要有一个工具,能代替我们实现与终端的交互,它能够代替我们实现与终端的交互 ...
- IOS 内存优化和调试技巧
基础部分 1: 图片内存大小小结 a: 图片:是占用内存的大户,尤其是手机游戏图片资源众多.对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中 ...
- python学习笔记011——内置函数filter()
1 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 2 语法 filter(function, iterable) function -- 函数,过 ...