永利平台娱乐今天写一个简单的Struts+Spring例子,

2020-01-05 19:23 来源:未知

国际化的应用
java语言对国际化的支持
1,ResourcedBu
2,Locale
获得java对国际化的支持
Locale[] locales=Locale.getAvailableLocales);
for(Locale locale:locales){
locale.getDisplayCountry+locale.getCountry
}
~~~~~~~~
getCountry()返回此语言环境的国家/地区代码
getDisplayLanguage()  返回适合向用户显示的语言环境语言名。
getLanguage()返回此语言环境的语言代码
```````
struts2中的文件
类名_国家_国家名.properties
heill_en_US.properties
heill_zh_CN.properties
heill_en_US.properties
将中文转成unicode码native2ascii
~~~~~~~~~~~~~~
测试上面的代码
  Locale locale=Locale.getDefault();//Locale.US//得到本地的文件
  ResourceBundle bundle=ResourceBundle.getBundle("heill",locale);//读取文件
String value=bundle.getString("key");//通过key来得到值
hell=u4F60u4EECu597Du554A {0}
其中的0是为了动态得到值
java.text.MessageFormat.format("被格式化的字符串",new Objec[]{"值"});

第一步:写好ACtion

        今天写一个简单的Struts+Spring例子。目前来说,很少有项目单独用一个框架的,Struts+Spring,这个应该是做Web开发的人都要学的。这段时间学了不少框架的知识,来写一个简单的先。

一 先创建一个web工程

strus2的应用  
新建一个message_ZH_cn.properties  
        message_en_US.properties  
在页面中写入  
    <s:text name="Message里面的key"/>  
   或<s:i18n name="文件名字">  
<s:text name="key"></s:text>  
</s:i18n>  
<s:i18n>是在指定的文件在去拿值  
在struts.xml文件中增加  
<constant name="struts.custom.i18n.resources"
value="message"></constant>  
<constant name="struts.i18n.encoding"
value="gbk"></constant>  
ActionSupport.getText(key)//是到国际化的值  
~~~~~~~~~~~~~  
动态获得  
List list=new ArrayList();  
listadd(要传入的参数);  
this.addActionError(this.getText(key),list);  
或者this.addActionError(this.getText(key),new
String[]{要传入的参数});  
~~~~~~~~~~~~  
在xml中国际化  
<message key="key"></key>  
~~~~~~~~~~~~~~~~~~~~~~~`  
包级别的(在要验证的包里面新建)  
取名package_zh_CN.properties  
~~~~~~~~~~~~~~~~~~~  
类级别的提示信息  
类名_zh_CN.properties  
~~~~~~~~~~~~~~~~~~~~~~~  
jsp页面信息国标化  
在textfield里面写加一个key="key"  
~~~~~~~~~~~~~~~~~~~~~~~~~~~

package com.inspur.actions;

        环境:jdk1.5, Eclipse3.2, Tomcat5.5, struts1.0, spring1.2。所有struts的tld文件放在WEB-INFtld下。

永利平台娱乐 1  

深入探索
可以重写struts.properties文件
如:struts.i18n.encoding=gbk
struts.saction.extension=do修改提交的方式为。do
struts.configuration.files=truts-default.xml,struts-plugin.xml,struts.xml修改配置struts的默认文件
也可以在web.xml中写入
<param-name>struts.action.extension</param-name>
<param-value>abcd</param-value>

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

        这个例子还是简单的登录,如果用户名为"Jim"而且密码为"111"的话就显示出一些消息,否则就跳转到登录错误页面。这个例子我没有写关于验证的东西,有兴趣的朋友可以参照我以前写的验证例子。

 

struts.xml中package 中有namespace="/hello"修改路径前缀  
action中应该写/hello/login.action,action是一定要写的  
在struts.xml中增加另外的xml文件struts2.xml  
&lt;include file="struts2.xml"&gt;&lt;/include&gt;  
~~~~~~

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

        首先,我们来配置WEB-INF下的web.xml:

二 引入struts的开发包到项目

属性驱动:action中要写表单中的所有的name,并生成get和set方法
对象驱动:要实现ModelDriven<对象名>,
  private User user=new User;
  public User getModel(){
  return user;}其它的不变
~~~~~~~~~~
出错信息放在指定的位置
<s:fielderror><s:param>username</s:param>
<s:fielderror>

import com.inspur.forms.*;

<?

从http://struts.apache.org下载

表单重复提交  
&lt;s:token&gt;&lt;/s:token&gt;  
在web.xml中加上  
&lt;interceptor-ref name="token"&gt;&lt;/interceptor&gt;  
还要加上默认的过滤器  
invalid.token  
&lt;result name="invalid.token"&gt;/回来相应的页面&lt;/reslut&gt;  
如果在页面中要显示出错信息用&lt;s:actionerror&gt;&lt;/s:actionerror&gt;  
默认的信息key是struts.messages.invalid.token=  
~~

public class LoginAction extends DispatchAction {
 //响应登录
  public ActionForward login(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
   System.out.println("******通过新的方式响应请求***********");
   /*
   
   EmployeeForm employeeForm=(EmployeeForm)form;
   //构建一个Employee对象
   Employee e=new Employee();
   e.setId(employeeForm.getId());
   e.setName(employeeForm.getName());
   e.setLeader(employeeForm.getLeader());
   e.setMid("111111");
   eif.addEmployee(e);
   request.getSession().setAttribute("adder", e);
   */
   return mapping.findForward("ok");
  }
  
}

xml version="1.0" encoding="UTF-8"?>

 

jakarta/cactus工具
mock工具都是单元测试的工具
~~~~~~~~~~~~
得到session
Map map=ActionContext.getContext().getSession();
map.put("usd",值);
得到request
ActionContext.getContext().put("dn",值);
//~~~
ServletContextAware接口
ServletRequestAware接口
ServletResponseAware接口
如果要使用以上接口,action得实现这些接口
重写里面的方法之后
在新建一个这样的接口属性,
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request){
this.request=request;
}

第二步:配置structs:

<!

三 编写login.jsp

HttpServletResponse response=ServletActionContext.getResponse();  
~~~~~~~~~~~~~~~~~~~~~~~~~~~

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//
DTD Struts Configuration 1.3//EN" "">
<struts-config>
 <form-beans>
 <form-bean name="userForm" type="com.inspur.forms.UserForm" />
 </form-beans>
 <action-mappings>
 <action path="/login" parameter="flag" name="userForm" >
 <forward name="ok" path="/WEB-INF/welcome.jsp"/>
 <forward name="err" path="/WEB-INF/login.jsp"/> 
 </action>
 </action-mappings>
 <!-- 配置代理请求处理 DelegatingRequestProcessor ,它的用户是
 
  -->
 <!--这里配置代理,用spring 框架代理sruts-->
 <controller>
   <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
 </controller>
</struts-config>

DOCTYPE web-app

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

动态方法调用(dynamic method invocation)
1,在jsp中增加action中写login!login1.action
前面的login是表示web.xml中请求
后面的login1是表示action中的方法名称
2,在xml文件中加method="action的方法名"

第三步:搭建spring框架:

PUBLIC

<%

通配符  
*代表任何字符method={0}  
&lt;action name="*Login" action="" method="{1}"&gt;&lt;/action&gt;  
{1}可以表示action里面要执行的方法(一般不用)  
~~~~~~~~~~~~  
结果类型  
chain将多个action作为一个链来处理  
dispatcher(转发默认)  
freemarker  
httpheader返回http响应头  
redirect(重定向)  
redirectAction重定向到另一个action  
stream  
velocity  
xslt  
plainText  
~~~~~~~~~~~~~~  
struts2整合jfreeChart  
1,jfreeChart的使用  
将lib包中增加jcommon.jar和jfreechart文件  
JFreeChart/ChartFactory  
准备数据  
DefaultPieDataset dpd = new DefaultPieDataset();  
  dpd.setValue("管理人员", 23);  
  dpd.setValue("开发人员", 32);  
  dpd.setValue("其它人员", 19);  
  dpd.setValue("市场人员", 10);  
  //JFreeChart chart=ChartFactory.createPieChart("某公司人员组织图",
dpd, true, true, false);  
  JFreeChart chart=ChartFactory.createPieChart3D("某公司人员组织图",
dpd, true, true, false);  
  ChartFrame cf=new ChartFrame("某公司人员组织图",chart);  
        cf.pack();  
        cf.setVisible(true);  
~~~~~~~~~~~~~~~~~~~~~~~

(1)applicationContext.xml一般放在src目录下:

"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

String path = request.getContextPath();

org.jfree.chart.servlet
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns=""
  xmlns:xsi=""
  xmlns:context=""
  xmlns:tx=""
  xsi:schemaLocation="
    
     ">

""

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

基于jsp的输出  
org.jfree.chart.servlet.*  
ServletUtilities.saveChartAsPNG();  
~~~~~~~~~

 

>

%>

struts整合jfreechart的
在action中定义一个变量
private JFreeChart chart;生成get/set方法
在exect中写
1:定义一个方法
@SuppressWarnings("unchecked")
increaseResult(List<String> list){
ActionContext context=ActionContext.getContext();
Map map=context.getApplication();
for(string str:list){
if(null==map.get(str)){
map.put(str,1);
}
else{
map.put(str,(Integer)mapget(str)+1);
}
}
}
private CategoryDataset getDataset(){
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
this.increaseResult(this.getInterest());
ActionContext context=ActionContext.getContext();
Map map=context.getApplication();
dataset.setValue(map.get("football"),"","足球");;
dataset.setValue(map.get("basketball"),"","篮球")
dataset.setValue(map.get("volleyball"),"","排球")
dataset.setValue(map.get("badminton"),"","羽毛球")
return dataset;
}

 

<

 

jar打包  
到要打包的目录  
jar cvf struts2-jfreechart-plugin-2.0.11 -C *  
将struts-plugin.xml中有extend="struts-package"  
在package中extends=“jfreechart-default”  
写action中  
&lt;result name=success type=chart&gt;  
&lt;param name=height&gt;500&lt;/param&gt;  
&lt;param name=width&gt;800&lt;/param&gt;  
&lt;/result&gt;  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

<!-- 配置action -->
<bean name="/login" scope="prototype" class="com.inspur.actions.LoginAction">
</bean>
</beans>

web-app>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

struts2整合spring
在web.xml中写
org.springframework.web.context.ContextLoaderListener
如果文件多的话,可以用
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>多个配置文件用逗号隔开</param-value>
</context-param>
~~~~~~~~~~~
Struts2整合JasperReport
java报表工具
1,JasperReport www.jasperforge.org
iReport管理工具
2,水晶报表 Business Object
3,Eclipse Business Inteligence and Reporting tool(BIRT)
www.eclipse.org/birt

(2)让web.xml配置好,好让web容器初始化struts以及spring:

<servlet>

<html>

整合jasperReport  
web.xml中的package中extends=jasperReport  
创建一个action  
&lt;result name=success type="jasper"&gt;  
&lt;param name="location"&gt;test.jasper&lt;/param&gt;  
&lt;param name="dataSource"&gt;数据源名称&lt;/param&gt;  
&lt;param name="format"&gt;HTML&lt;/param&gt;  
&lt;/result&gt;  
在action类中写  
创建一个list集合  
用iReport工具写好文件,会自动生成test.jasper  
将文件放在web-Root中  
~~~~~~~~

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="" xmlns="" xsi:schemaLocation=" " version="3.0">
  <display-name>VoteSystem</display-name>
 
 
  <!-- 开始配置struts -->
  <servlet>
 <servlet-name>struts</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>
 <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
 <servlet-name>struts</servlet-name>
 <url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet-name>action</servlet-name>

  <head>

struts2与json
存[{id:1,name:zhangshan},{id:2,name:lisi}]

<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 对Spring容器进行实例化 -->
<listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet-class>

    <base href="<%=basePath%>">

取一个信息{id:1,name:zhangshan}

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

org.apache.struts.action.ActionServlet

   

 

</servlet-class>

    <title>My JSP 'login.jsp' starting page</title>

<init-param>

   

<param-name>config</param-name>

        <meta http-equiv="pragma" content="no-cache">

<param-value>/WEB-INF/struts-config.xml</param-value>

        <meta http-equiv="cache-control" content="no-cache">

</init-param>

        <meta http-equiv="expires" content="0">   

<init-param>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<param-name>debug</param-name>

        <meta http-equiv="description" content="This is my page">

<param-value>0</param-value>

        <!--

</init-param>

        <link rel="stylesheet" type="text/css" href="styles.css">

<init-param>

        -->

<param-name>detail</param-name>

 

<param-value>2</param-value>

  </head>

</init-param>

 

<load-on-startup>1</load-on-startup>

  <body>

</servlet>

    <form action="/strutslogin/login.do" method="post">

<servlet-mapping>

        u:<input type="text" name="username"><br/>

<servlet-name>action</servlet-name>

        p:<input type="password" name="password"><br/>

<url-pattern>*.do</url-pattern>

        <input type="submit" value="login">

</servlet-mapping>

    </form>

<welcome-file-list>

  </body>

<welcome-file>index.jsp</welcome-file>

</html>

</welcome-file-list>

 

<taglib>

四 编写ActonForm(用户表单)和Action(登录小队长)

<taglib-uri>/tags/struts-html</taglib-uri>

package com.cakin.forms;

<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>

//这是一个用户表单,用于填充数据的

</taglib>

import org.apache.struts.action.ActionForm;

<taglib>

 

<taglib-uri>/tags/struts-logic</taglib-uri>

public class UserForm extends ActionForm {

<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>

        //定义属性【属性名应该和jsp页面的控件名称一致】

</taglib>

        //如果有人提出疑问:表单名字是不是一定要和控件名称一样?不一定,但要保证get和set方法的名字和

<taglib>

        //控件名称一致

<taglib-uri>/tags/struts-bean</taglib-uri>

        private String username;

<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>

        private String password;

</taglib>

        public String getUsername() {

</

                return username;

web-app>

        }

        这个跟以前的web.xml并没有什么不同。然后我们来写struts-config.xml:

        public void setUsername(String username) {

<?

                this.username = username;

xml version="1.0" encoding="UTF-8"?>

        }

<!

        public String getPassword() {

永利平台娱乐,DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" ";

                return password;

<

        }

struts-config>

        public void setPassword(String password) {

<data-sources />

                this.password = password;

<form-beans>

        }

<form-bean name="loginForm" type="src.LoginForm" />

        

</form-beans>

}

<global-exceptions />

永利平台娱乐 2  

<global-forwards />

package com.cakin.actions;

<action-mappings>

//这是一个action(表示小队长,需要继承Action)

<action path="/login"

import javax.servlet.http.HttpServletRequest;

name="loginForm"

import javax.servlet.http.HttpServletResponse;

input="/login.jsp"

 

type="org.springframework.web.struts.DelegatingActionProxy">

import org.apache.struts.action.Action;

<forward name="success" path="/success.jsp" />

import org.apache.struts.action.ActionForm;

<forward name="failure" path="/failure.jsp" />

import org.apache.struts.action.ActionForward;

</action>

import org.apache.struts.action.ActionMapping;

</action-mappings>

 

<message-resources parameter="src.ApplicationResource" />

import com.cakin.forms.UserForm;

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

 

<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />

public class LoginAction extends Action {

</plug-in>

        //我们需要重新编写一个方法:execute会被自动调用,有点类似servlet的service方法。

</

        @Override

TAG标签:
版权声明:本文由永利平台娱乐发布于新闻动态,转载请注明出处:永利平台娱乐今天写一个简单的Struts+Spring例子,