Hibernate+Struts应用程序的JavaWebStudio 2005下快速、可视化开发

基于MATLAB的太阳能光伏电力仿真,模拟每日太阳能发电,可视化功率曲线,并通过数值积分计算总能量输出。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载
rel="File-List" href="http://www.javawebstudio.com/html/J2005/j05_New_7.files/filelist.xml"> 如何实现Hibernate_Struts

Hibernate+Struts应用程序的JavaWebStudio 2005下快速、可视化开发


Struts中文论坛:http://www.javawebstudio.com/
JavaWebStudio 2005下载地址:http://www.javawebstudio.com/bbs/dispbbs.asp?boardID=5&ID=3&page=1

 

 

[目标]

本例的目标是实现一个简单的Struts 数据库应用程序。其功能是从SQL Server 2000中读取数据,并以表格的形式在输出页中显示出来。

定义一个名为“Test”表的字段:

录入一些测试数据:

  

[效果]

(1)全部显示:

输入页面:

输出页面:

 

(2)查询显示:

 

[背景知识]

 

 

[步骤]

 

1、打开Visual Struts开发环境:

从桌面JavaWebStudio快揵或BIN目录下的JavaWebStudio.exe文件启动JavaWebStudio的Visual Struts开发环境。

 

2、建立一个“空的Hibernate_Struts项目模板”应用程序:

    选择菜单“文件”—“新建”—“新建项目”,弹出新建项目对话框,如图3-1所示:

 

在对话框中选择“空的Struts数据库应用模板”,在项目名称中输入“MyHibernate”,package (包名)和位置(项目的路径)采用默认的值就行,当然也可以根据需要改变。最后点击“确定”按钮完成新项目的建立。

 

从文件管理器中可看出MyHibernate项目的文件结构如下:

在MyHibernate项目根目录下包含四个子目录和两个文件,这是JavaWebStudio项目的标准结构,最好不要改变它们默认的名称,否则会出现问题。

 

3、利用Struts数据库应用文件向导建立新的应用:

在JavaWebStudio文件管理器内点击鼠标右键,在弹出的菜单中选择“Hibernate”—“Hibernate_Struts文件向导”进入Struts文件向导对话框,也可以选择菜单“文件向导”—“ Hibernate_Struts文件向导”进入Hibernate文件向导对话框。如下图所示:

(1)输入文件名:

(2)从数据源中导入SQL语句及数据表的字段信息(字段名和字段类型):

 

(3)从数据据表中选择所需的表“Test”。

需要特别注意的是,这里的“从数据源中导入SQL语句及数据表的字段信息”及“从数据据表中选择所需的表”仅仅是为了自动生成SQL语句及读取字段信息,这里完成可以直接手工输入,与该项目的数据库连接池的配置无关,下面第(4)点将另行配置数据库连接池。

 

DAO文件、输入JSP文件、ActionForm文件、Action文件等选择默认就行了,主要是设置一下JSPOut文件,让它自动分页、每页显示4条记录,选择删除、编辑、链接和添加新记录功能。

 

接下来配置数据库连接池,其它属性页可采用默认的就行了,下面直接转去数据连接配置属性页即可。

(4)配置数据库连接池:

 

这里要特别注意的是Hibernate的数据库连接池配置文件是Hibernate.properties,并且dialect类名是org.hibernate.dialect.SQLServerDialect。

 

4、项目文件结构

 

项目目录结构分析见《如何实现最简单的Struts程序》,这次Hibernate文件向导自动生成了八个文件,其中web目录下是输入、输出两个JSP文件,src目录下是Java文件。除了文件名是我们输入之外,所有程序源代码都是文件向导自动生成的,所有的配置也是自动完成的。

刷新JavaWebStudio文件管理器,这时发现web目录下自动生成了两个文件,分别是Test.jsp.jsp、TestInsert.jsp和TestOut.jsp.jsp,分别是查询条件输入JSP文件、新记录添加JSP文件和表格输出JSP文件;src/emptyprj目录下自动生成了五个文件,分别是TestAction.java和TestForm.java,前者是Action文件,后者是FormAction文件;还有是数据库操作文件Test.java和TestDAO.java,前者用于保存数据表记录的Bean,后者是数据库操作DAO文件;还要特别注意的是还有一个xml文件,就是Test.hbm.xml,用于Hibernate对象与数据库的映射。

 

Test.jsp文件:

 

TestInsert.jsp文件:

 

TestOut.jsp文件:

 

 

5、编译、启动服务器、运行:

  通过工具条上的按键分别编译项目及启动服务器,然后把开Test.jsp并通过工具条上的“运行”按键运行Test.jsp。

这里将采用调试状态下的运行方式:

(1)       显示调试工具条:

 

注:单步执行可跟踪进原函数执行;单过程执行按语句跟踪,一般选择单过程执行即可。

 

(2)选择调试状态下的“编译”:

输出栏中输出如下提示信息:

C:/Documents and Settings/Administrator/桌面>F:

F:/>cd F:/JavaWebStudio/JavaWebStudioWorkDir/MyHibernate

F:/JavaWebStudio/JavaWebStudioWorkDir/MyHibernate>ant -buildfile build.xml

Buildfile: build.xml

prepare:

     [copy] Copying 1 file to F:/JavaWebStudio/jakarta-tomcat-5.5.4/webapps/MyHibernate/WEB-INF/classes

compile:

    [javac] Compiling 5 source files to F:/JavaWebStudio/jakarta-tomcat-5.5.4/webapps/MyHibernate/WEB-INF/classes

    [javac] F:/JavaWebStudio/JavaWebStudioWorkDir/MyHibernate/src/emptyprj/TestAction.java:68: setUserID(int) in emptyprj.Test cannot be applied to (java.lang.String)

    [javac]                  m_Test.setUserID(expression);

    [javac]                        ^

    [javac] 1 error

BUILD FAILED

F:/JavaWebStudio/JavaWebStudioWorkDir/MyHibernate/build.xml:34: Compile failed; see the compiler error output for details.

Total time: 9 seconds

出现一个错误,原因是因为前面我们设置userID为整数类型,而这里的expression是字符串类型,所以要修改一下TestAction.java文件:

package  emptyprj;

 

 

import emptyprj.TestDAO;

 

import java.lang.reflect.InvocationTargetException;

import java.util.Locale;

import javax.servlet.ServletException;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionServlet;

import org.apache.struts.util.ModuleException;

import org.apache.struts.util.MessageResources;

 

import java.io.IOException;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Collection;

 

public final class TestAction extends Action

{

    // 变量定义:

    private Log log = LogFactory.getLog("org.apache.struts.webapp.Example");

    public TestAction() {

      

    }

 

 

    //函数定义:

    public ActionForward execute(ActionMapping mapping,

                             ActionForm form,

                             HttpServletRequest request,

                             HttpServletResponse response)

       throws Exception

    {

       // Extract attributes and parameters we will need

       Locale locale = getLocale(request);

       MessageResources messages = getResources(request);

       HttpSession session = request.getSession();

       TestForm m_TestForm = (TestForm) form;

      

                TestDAO m_TestDAO = TestDAO.getInstance();  //定义Hibernate__DAO对象,用于实现数据库的各种操作

 

                String action=request.getParameter("action");  //动作类型                 

                String search=request.getParameter("search");  //数据库查找方式

                String expression=request.getParameter("expression");    //参数,这里用于保存记录(行)的ID数据

               

                if(action==null)action="find";

              if(search==null)search="UNsearch";

              if(expression==null)expression="";

              expression=toChinese(expression);  //处理中文问题,实现编码转换

             

            /

              if("delete".equals(action))    //删除记录操作 

            {

                 Test m_Test= new Test();

                 //<delete>

                 m_Test.setUserID(expression);

                 //</delete>             

                   m_TestDAO.removeID(m_Test);

             }

 

           

             if("update".equals(action)||"insert".equals(action))    //更新、添加记录操作

             {

                 Test m_Test= new Test();

                     //<update>

                   m_Test.setUserID(m_TestForm.getUserID());

                   m_Test.setUsername(m_TestForm.getUsername());

                   m_Test.setPassword(m_TestForm.getPassword());

                   m_Test.setRole(m_TestForm.getRole());

                   //</update>

                    if("update".equals(action))    //调用DAO对象更新记录

                             m_TestDAO.update(m_Test,expression);

                    if("insert".equals(action))    //调用DAO对象添加记录

                         m_TestDAO.create(m_Test);

                              

             }

               

              ///HQL_查找数据库

              String sql="from emptyprj.Test Test";

            

              SQL字符处理,主要是加入查询条件,如果是全部显示,可把这部分代码删除。

                if("search".equals(search))

                {

                  String selectsql;

                    //<search>

                       sql+=" where ";

                     sql+="userID";

                     sql+="=";

                     if("NULL".equals(expression)||"".equals(expression))

                    {

                           sql+=m_TestForm .getUserID();

                       }

                       else

                       {

                           sql+=expression;

                       }

                       

                       sql+="";

                    //</search>

                }

 

             //<分页>

                m_TestDAO.setLength(4);//设置每页显示记录数

                int ipage;//当前页

                try

                {

                    String page=request.getParameter("page");//分页参数,读取请求的当前页

                    ipage=java.lang.Integer.parseInt(page,10);

                }

                catch (Exception e)

             {

                 ipage=m_TestForm.getPage();

             }

             if(ipage<1)ipage=1;

             Collection col = m_TestDAO.findSQL("select Test "+sql,"select count(Test) "+sql,ipage);//通过DAO对象查询数据

                request.setAttribute("Test",col);  //保存数据     

               

                String pagestr=m_TestDAO.getPagestr(ipage);//分页字符串,分页内容

              String s_find,str;

                if(!"search".equals(search))    //查找和全部显示两个不同的操作,其分页字符串不同,在此进行处理。如果是全部显示则去掉"search=search&"

                {

                    s_find="search=search&";

                    while(pagestr.indexOf(s_find)!=-1)

                    {

                        str=pagestr.substring(0,pagestr.indexOf(s_find));

                        str+=pagestr.substring(pagestr.indexOf(s_find)+s_find.length(),pagestr.length());

                        pagestr=str;

                    }

                }

                m_TestForm.setPagestr(pagestr);  

              m_TestForm.setAction(action);     

                request.setAttribute("TestForm",m_TestForm);

              //</分页>

 

 

                return mapping.findForward("success");

    

    }

 

 public String toChinese(String ss) {

    //处理中文问题,实现编码转换

    if (ss != null) {

      try {

        String temp_p = ss;

        byte[] temp_t = temp_p.getBytes("ISO8859-1");

        ss = new String(temp_t);

      }

      catch (Exception e) {

        System.err.println("toChinese exception:" + e.getMessage());

        System.err.println("The String is:" + ss);

      }

    }

    return ss;

  }

 

}

把上述TestAction.java文件第68行:

m_Test.setUserID(expression);

修改成:

m_Test.setUserID(java.lang.Integer.parseInt(expression,10));

 

(3)启动调试状态下的服务器:

输出栏中输出如下提示信息:

C:/Documents and Settings/Administrator/桌面>F:

F:/>cd F:/JavaWebStudio//jakarta-tomcat-5.5.4/bin/

F:/JavaWebStudio/jakarta-tomcat-5.5.4/bin>startup_jpda.bat

Using CATALINA_BASE:   F:/JavaWebStudio/jakarta-tomcat-5.5.4

Using CATALINA_HOME:   F:/JavaWebStudio/jakarta-tomcat-5.5.4

Using CATALINA_TMPDIR: F:/JavaWebStudio/jakarta-tomcat-5.5.4/temp

Using JAVA_HOME:       F:/JavaWebStudio/jdk

 

服务器启动成功。

 

(4)启动调试状态:

输出栏中输出如下提示信息:

下面将执行的命令是: JDB -attach jdbconn

Set uncaught java.lang.Throwable

Set deferred uncaught java.lang.Throwable

Initializing jdb ...

> 

 

(5)设置断点:

打开TestAction文件,分别在127、136行设置两个断点。输出栏中输出如下提示信息:

下面将执行的命令是: JDB -attach jdbconn

Set uncaught java.lang.Throwable

Set deferred uncaught java.lang.Throwable

Initializing jdb ...

> 下面将执行的输入参数是: stop at emptyprj.TestAction:127

Deferring breakpoint emptyprj.TestAction:127.

It will be set after the class is loaded.

> 下面将执行的输入参数是: stop at emptyprj.TestAction:136

Deferring breakpoint emptyprj.TestAction:136.

It will be set after the class is loaded.

> 

 

 

(6)打开Test.jsp文件,并运行:

运行结果:

 

试一下全部显示功能,点击“全部显示”接钮,如果如下图所示:

可见运行到了断点第128行处,再点击一下调试工具条中的单过程执行,这时的变量值从输出提示栏中可看出:

http-8080-Processor25[1] 下面将执行的输入参数是: locals

下面将执行的输入参数是: next

Method arguments:

mapping = instance of org.apache.struts.action.ActionMapping(id=1701)

form = instance of emptyprj.TestForm(id=1702)

request = instance of org.apache.catalina.connector.RequestFacade(id=1703)

response = instance of org.apache.catalina.connector.ResponseFacade(id=1704)

Local variables:

locale = instance of java.util.Locale(id=1705)

messages = instance of org.apache.struts.util.PropertyMessageResources(id=1706)

session = instance of org.apache.catalina.session.StandardSessionFacade(id=1707)

m_TestForm = instance of emptyprj.TestForm(id=1702)

m_TestDAO = instance of emptyprj.TestDAO(id=1708)

action = "search"

search = "UNsearch"

expression = "NULL"

sql = "from emptyprj.Test Test"

ipage = 1

http-8080-Processor25[1] >

Step completed: "thread=http-8080-Processor25", emptyprj.TestAction.execute(), line=128 bci=509

 

http-8080-Processor25[1]

 

 

现在试一下单步执行:

http-8080-Processor25[1] 下面将执行的输入参数是: locals

下面将执行的输入参数是: step

Method arguments:

mapping = instance of org.apache.struts.action.ActionMapping(id=1752)

form = instance of emptyprj.TestForm(id=1753)

request = instance of org.apache.catalina.connector.RequestFacade(id=1754)

response = instance of org.apache.catalina.connector.ResponseFacade(id=1755)

Local variables:

locale = instance of java.util.Locale(id=1756)

messages = instance of org.apache.struts.util.PropertyMessageResources(id=1757)

session = instance of org.apache.catalina.session.StandardSessionFacade(id=1758)

m_TestForm = instance of emptyprj.TestForm(id=1753)

m_TestDAO = instance of emptyprj.TestDAO(id=1759)

action = "search"

search = "UNsearch"

expression = "NULL"

sql = "from emptyprj.Test Test"

ipage = 1

col = instance of java.util.ArrayList(id=2326)

http-8080-Processor25[1] >

Step completed: "thread=http-8080-Processor25", org.apache.catalina.connector.RequestFacade.setAttribute(), line=346 bci=0

http-8080-Processor25[1]

这时执行到了org.apache.catalina.connector.RequestFacade.setAttribute(),RequestFacade.java文件的第246行。

 

 

点击一下调试工具条中的 “执行到下一个断点”,执行到第137行。

 

再点击一下调试工具条中的 “执行到下一个断点”,输出最后结果,如下图所示。

 

通过上述步骤,实现了预计的目标功能。

 

 

 

 

[程序源代码]

ConnectionFactory.java文件:

package  emptyprj;

import org.hibernate.HibernateException;

import org.hibernate.MappingException;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class ConnectionFactory

{

       private static ConnectionFactory instance = null;

       private SessionFactory sessionFactory = null;

       private ConnectionFactory()

       {

              try

              {

                     //从这里装截映射文件

                     Configuration cfg = new Configuration().

                                             addClass(emptyprj.Test.class);

                     sessionFactory = cfg.buildSessionFactory();

              }

              catch (MappingException e)

              {

                     System.err.println("Mapping Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

       }

       public static synchronized ConnectionFactory getInstance()

       {

              if (instance == null)

              {

                     instance = new ConnectionFactory();

              }

              return instance;

       }

       public Session getSession()

       {

              try

              {

                     Session s = sessionFactory.openSession();

                     return s;

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

       }

}

 

Test.hbm.xml文件:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

 

<hibernate-mapping>

    <class name="emptyprj.Test" table="users" >

        <id name="userID" column="userID" type="int" unsaved-value="null">

            <generator class="uuid.hex"/>

        </id>

        <property name="username" column="username" type="java.lang.String" />

        <property name="password" column="password" type="java.lang.String" />

        <property name="role" column="role" type="java.lang.String" />

     </class>

</hibernate-mapping>

 

hibernate.properties数据库连接池配置文件:

hibernate.dialect=org.hibernate.dialect.SQLServerDialect

hibernate.connection.driver_class=com.microsoft.jdbc.sqlserver.SQLServerDriver

hibernate.connection.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=EDB

hibernate.dbcp.min_size=5

hibernate.dbcp.max_size=20

hibernate.dbcp.timeout=1800

hibernate.dbcp.max_statements=50

hibernate.connection.username=sa

hibernate.connection.password=sa

 

///

Test.java文件:

这样定义一个用于保存数据表数据的Bean,它的变量与数据库表的字段完全对应,也就是与数据库应用文件向导中的SQL语句要查找的字段完全对应。

package  emptyprj;

import java.io.Serializable;

public class Test implements Serializable 

{

          private String  role;

          private String  password;

          private String  username;

          private int  userID;

    //myfiledata;

        public int getUserID()

        {

            return (this.userID);

        }

        public void setUserID(int userID)

        {

            this.userID=userID;

        }

        public String getUsername()

        {

            return (this.username);

        }

        public void setUsername(String username)

        {

            this.username=username;

        }

        public String getPassword()

        {

            return (this.password);

        }

        public void setPassword(String password)

        {

            this.password=password;

        }

        public String getRole()

        {

            return (this.role);

        }

        public void setRole(String role)

        {

            this.role=role;

        }

}

 

TestDAO.java文件:

  这里定义一个DAO类,用于实现数据加的查找、删除、更新、添加及生成分页字符串等功能。

package  emptyprj;

import emptyprj.Test;

 

import org.hibernate.HibernateException;

import org.hibernate.ObjectNotFoundException;

import org.hibernate.Query;

import org.hibernate.Session;

 

import java.util.List;

import java.util.Iterator;

 

public class TestDAO {

 

    private int rowCount;

    private int pageCount;

    private int length;     

    private String pagestr;

    public int getLength()  {  return (this.length);   }

    public void setLength(int length)  { this.length=length; } 

 

    private static TestDAO  instance = null;

    private TestDAO ()

    {

    }

 

       public static synchronized TestDAO  getInstance()

       {

              if (instance == null)

              {

                     instance = new TestDAO ();

              }

              return instance;

       }

 

       public Test getTest(Long id)

       {

              Session session = ConnectionFactory.getInstance().getSession();

              try

              {

                     return (Test) session.load(Test.class, id);

              }

              catch (ObjectNotFoundException onfe)

              {

                     return null;

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

              finally

              {

                     if (session != null)

                     {

                            try

                            {

                                   session.close();

                            }

                            catch (HibernateException e)

                            {

                                   System.err.println("Hibernate Exception" + e.getMessage());

                                   throw new RuntimeException(e);

                            }

 

                     }

              }

 

       }

 

      

       public void update(Test Test,String keyID)

       {

              Session session = ConnectionFactory.getInstance().getSession();

 

              try

              {

                     session.update(Test);

                     session.flush();

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

                 finally

              {

                     if (session != null)

                     {

                            try

                            {

                                   session.close();

                            }

                            catch (HibernateException e)

                            {

                                   System.err.println("Hibernate Exception" + e.getMessage());

                                   throw new RuntimeException(e);

                            }

 

                     }

              }

 

       }

 

       public void removeID(Test Test) {

             Session session = ConnectionFactory.getInstance().getSession();

              try

              {

                     session.delete(Test);

                     session.flush();

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

              finally

              {

                     if (session != null)

                     {

                            try

                            {

                                   session.close();

                            }

                            catch (HibernateException e)

                            {

                                   System.err.println("Hibernate Exception" + e.getMessage());

                                   throw new RuntimeException(e);

                            }

 

                     }

              }

 

       }

 

 

       public List findSQL(String sql,String countsql,int ipage)

       {

              Session session = ConnectionFactory.getInstance().getSession();

              try

              {

                     //提取记录总数

                     Iterator results = session.createQuery(countsql).iterate();

                     while ( results.hasNext() ) {

                         //Object[] row = results.next();

                              //rowCount= (Integer) row[0];

                              rowCount= (Integer) results.next();

                     }

                    

                    //rowCount=10;

                    int offset=1;

                    int pagesize=getLength();

                    if(getLength()<1)

                    {

                          pagesize=rowCount;

                        pageCount=1;

                    }

                    else

                    {

                        pageCount=rowCount/getLength()+((rowCount%getLength())>0?1:0);

                        offset=(ipage-1)*getLength()+1;

                        if(offset<1)offset=1;

                        if(offset>rowCount)offset=rowCount;       

        

                    }

                     //提取数据

                     Query query =       session.createQuery(sql);

                     query.setFirstResult((ipage-1)*getLength());

                     query.setMaxResults(pagesize);

                     return query.list();

 

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

              finally

              {

                     if (session != null)

                     {

                            try

                            {

                                   session.close();

                            }

                            catch (HibernateException e)

                            {

                                   System.err.println("Hibernate Exception" + e.getMessage());

                                   throw new RuntimeException(e);

                            }

                     }

              }

       }

 

       //添加一条新记录

       public void create(Test Test)

       {

              Session session = ConnectionFactory.getInstance().getSession();

              try

              {

                     session.save(Test);

                     session.flush();

              }

              catch (HibernateException e)

              {

                     System.err.println("Hibernate Exception" + e.getMessage());

                     throw new RuntimeException(e);

              }

              finally

              {

                     if (session != null)

                     {

                            try

                            {

                                   session.close();

                            }

                            catch (HibernateException e)

                            {

                                   System.err.println("Hibernate Exception" + e.getMessage());

                                   throw new RuntimeException(e);

                            }

                     }

              }

       }

 

    //分页字符串处理

    public String getPagestr(int ipage)

    {

           String strPage="";

              if(getLength()>0)

              {

                    strPage+="共";

                    strPage+=String.valueOf(rowCount);

                    strPage+="条记录,共";

                    strPage+=String.valueOf(pageCount);

                    strPage+="页,当前是第";

                    strPage+=String.valueOf(ipage);

                    strPage+="页,      ";

               

                    int istart,iend;

                    istart=ipage-5;

                    if(istart<0) {istart=0;}

                    iend=istart+10;

                    if(iend>pageCount) {iend=pageCount;}

                    istart=iend-10;

                    if(istart<0) {istart=0;}

                    for(int i=istart;i<iend;i++)

                    {

                        strPage+="<a href='TestAction.do?action=find&search=search&page=";

                        strPage+=String.valueOf(i+1);

                        strPage+="'>";

                        strPage+=String.valueOf(i+1);

                        strPage+="</a>";

                        strPage+="  ";

                    }

           }

           this.pagestr=strPage;

           return strPage;

  }

 

}

TestForm.java文件:

  这里定义一个ActionForm Bean,除了包含与数据库表的字段完全对应的变量外(例如可用于保存查询条件中相应字段的变量的值、保存某行记录的数据等),还包含了与分页相关的变量,例如当前页码、分页字符串等变量。

package  emptyprj;

 

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

 

public final class TestForm extends ActionForm 

{

          private String  role;

          private String  password;

          private String  username;

          private int  userID;

          private int page;

          private String  pagestr;

          private String  action;

          private String mybeanvariable1;

    //myfiledata;

        public String getMybeanvariable1()

        {

            return (this.mybeanvariable1);

        }

        public void setMybeanvariable1(String mybeanvariable1)

        {

            this.mybeanvariable1=mybeanvariable1;

        }

        public String getAction()

        {

            return (this.action);

        }

        public void setAction(String action)

        {

            this.action=action;

        }

        public String getPagestr()

        {

            return (this.pagestr);

        }

        public void setPagestr(String pagestr)

        {

            this.pagestr=pagestr;

        }

        public int getPage()

        {

            return (this.page);

        }

        public void setPage(int page)

        {

            this.page=page;

        }

        public int getUserID()

        {

            return (this.userID);

        }

        public void setUserID(int userID)

        {

            this.userID=userID;

        }

        public String getUsername()

        {

            return (this.username);

        }

        public void setUsername(String username)

        {

            this.username=username;

        }

        public String getPassword()

        {

            return (this.password);

        }

        public void setPassword(String password)

        {

            this.password=password;

        }

        public String getRole()

        {

            return (this.role);

        }

        public void setRole(String role)

        {

            this.role=role;

        }

}

 

TestAction.java文件:

   这里定义一个Action类,用于实现页面的转发功能,另外还包括了不同请求类型的不同操作。其中action变量表示操作类型,相当于事件类型。通过这个变量,实现了类似于.NET中的“事件驱动”的功能。

package  emptyprj;

 

import emptyprj.TestDAO;

import java.lang.reflect.InvocationTargetException;

import java.util.Locale;

import javax.servlet.ServletException;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionServlet;

import org.apache.struts.util.ModuleException;

import org.apache.struts.util.MessageResources;

 

import java.io.IOException;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.Collection;

 

public final class TestAction extends Action

{

    // 变量定义:

    private Log log = LogFactory.getLog("org.apache.struts.webapp.Example");

    public TestAction() {

      

    }

 

 

    //函数定义:

    public ActionForward execute(ActionMapping mapping,

                             ActionForm form,

                             HttpServletRequest request,

                             HttpServletResponse response)

       throws Exception

    {

       // Extract attributes and parameters we will need

       Locale locale = getLocale(request);

       MessageResources messages = getResources(request);

       HttpSession session = request.getSession();

       TestForm m_TestForm = (TestForm) form;

      

                 TestDAO m_TestDAO = TestDAO.getInstance();  //定义Hibernate__DAO对象,用于实现数据库的各种操作

 

                 String action=request.getParameter("action");  //动作类型                 

                 String search=request.getParameter("search");  //数据库查找方式

                 String expression=request.getParameter("expression");    //参数,这里用于保存记录(行)的ID数据

                

                 if(action==null)action="find";

              if(search==null)search="UNsearch";

              if(expression==null)expression="";

              expression=toChinese(expression);  //处理中文问题,实现编码转换

              

            /

               if("delete".equals(action))    //删除记录操作 

            {

                 Test m_Test= new Test();

                 //<delete>

                 m_Test.setUserID(java.lang.Integer.valueOf(expression));

                 //</delete>             

                    m_TestDAO.removeID(m_Test);

             }

 

           

              if("update".equals(action)||"insert".equals(action))    //更新、添加记录操作

              {

                 Test m_Test= new Test();

                     //<update>

                    m_Test.setUserID(m_TestForm.getUserID());

                    m_Test.setUsername(m_TestForm.getUsername());

                    m_Test.setPassword(m_TestForm.getPassword());

                    m_Test.setRole(m_TestForm.getRole());

                    //</update>

                     if("update".equals(action))    //调用DAO对象更新记录

                              m_TestDAO.update(m_Test,expression);

                     if("insert".equals(action))    //调用DAO对象添加记录

                          m_TestDAO.create(m_Test);

                              

              }

                

              ///HQL_查找数据库

              String sql="from emptyprj.Test Test";

            

              SQL字符处理,主要是加入查询条件,如果是全部显示,可把这部分代码删除。

                 if("search".equals(search))

                 {

                  String selectsql;

                     //<search>

                        sql+=" where ";

                     sql+="userID";

                     sql+="=";

                     if("NULL".equals(expression)||"".equals(expression))

                    {

                            sql+=m_TestForm .getUserID();

                        }

                        else

                        {

                            sql+=expression;

                        }

                        

                        sql+="";

                     //</search>

                 }

 

             //<分页>

                m_TestDAO.setLength(4);//设置每页显示记录数

                int ipage;//当前页

                try

                {

                    String page=request.getParameter("page");//分页参数,读取请求的当前页

                    ipage=java.lang.Integer.parseInt(page,10);

                }

                catch (Exception e)

             {

                 ipage=m_TestForm.getPage();

             }

             if(ipage<1)ipage=1;

             Collection col = m_TestDAO.findSQL("select Test "+sql,"select count(Test) "+sql,ipage);//通过DAO对象查询数据

                request.setAttribute("Test",col);  //保存数据     

               

                String pagestr=m_TestDAO.getPagestr(ipage);//分页字符串,分页内容

              if(!"search".equals(search))    //查找和全部显示两个不同的操作,其分页字符串不同,在此进行处理。如果是全部显示则去掉"search=search&"

                 {

                     pagestr=pagestr.replaceAll("search=search&","");

                 }

                m_TestForm.setPagestr(pagestr);  

              m_TestForm.setAction(action);     

                request.setAttribute("TestForm",m_TestForm);

              //</分页>

 

 

                 return mapping.findForward("success");

    

    }

 

 public String toChinese(String ss) {

    //处理中文问题,实现编码转换

    if (ss != null) {

      try {

        String temp_p = ss;

        byte[] temp_t = temp_p.getBytes("ISO8859-1");

        ss = new String(temp_t);

      }

      catch (Exception e) {

        System.err.println("toChinese exception:" + e.getMessage());

        System.err.println("The String is:" + ss);

      }

    }

    return ss;

  }

 

}

web.xml文件:

  这里除了普通的Struts项目的配置之外,还包括数据库连接池的配置,见暗体字部分的代码。

<?xml version="1.0" encoding="ISO-8859-1"?>

 

<!DOCTYPE web-app

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

  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

 

<web-app>

 

  <!-- Standard Action Servlet Configuration -->

  <servlet>

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

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

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

  </servlet>

   

<filter>

    <filter-name>Set Character Encoding</filter-name>

    <filter-class>javawebstudio.struts_db.SetCharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>GB2312</param-value>

    </init-param>

    <init-param>

        <param-name>ignore</param-name>

        <param-value>true</param-value>

    </init-param>

</filter>

 

<filter-mapping>

    <filter-name>Set Character Encoding</filter-name>

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

</filter-mapping>

 

 

  <!-- Standard Action Servlet Mapping -->

  <servlet-mapping>

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

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

  </servlet-mapping>

 

 

  <welcome-file-list>

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

  </welcome-file-list>

 

 

  <!-- Struts Tag Library Descriptors -->

  <taglib>

    <taglib-uri>/bean</taglib-uri>

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

  </taglib>

 

  <taglib>

    <taglib-uri>/html</taglib-uri>

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

  </taglib>

 

  <taglib>

    <taglib-uri>/logic</taglib-uri>

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

  </taglib>

 

  <taglib>

    <taglib-uri>/template</taglib-uri>

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

  </taglib>

</web-app>

 

 

struts-config.xml文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>

 

<!DOCTYPE struts-config PUBLIC

          "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"

          "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

 

<struts-config>

 

<form-beans>

 

 

<form-bean  name="TestForm"

                 type="emptyprj.TestForm"  />

</form-beans>

 

<action-mappings>

 

 

<action  path="/TestAction"

             type="emptyprj.TestAction"

              name="TestForm" 

            scope="request"

             input="/Test.jsp">

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

</action-mappings>

 

<!-- ========== Message Resources Definitions =========================== -->

 

  <message-resources    parameter="ApplicationResources_ch.properties"/>

 

  <message-resources    parameter="AlternateApplicationResources"

                         key="alternate">

  </message-resources>

 

</struts-config>

 

人脸识别签到考勤系统实战源码 这是一套可直接运行的人脸识别智能签到考勤系统,基于OpenCV YuNet人脸检测与SFace特征识别实现,全程本机运行,数据保存在本地SQLite,不上传任何服务器。配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、逐步骤操作截图和答辩PPT讲解。 系统围绕五个功能模块展开:人脸注册支持照片批量导入并提取特征入库;识别签到支持照片或摄像头两种方式,实时框出人脸并标注姓名、相似度与考勤状态;考勤规则引擎按config.py里配置的上下班时间与宽限分钟,自动判定迟到、早退、缺勤;Tkinter管理面板完成人员管理、流水查询与月度汇总;最后通过openpyxl一键导出整月考勤矩阵,正常绿、迟到黄、缺勤红,Excel打开即用。 选型上特意选了YuNet+SFace路线:纯pip安装免编译,CPU单帧识别不到100ms,两个ONNX模型共约37MB,出自OpenCV官方模型仓库,毕设报告引用有据可查。教程第7章整理了16条Windows下真实踩过的报错及排查方法,第8章给出换模型、换人脸、加功能的二次开发路径。 适合做计算机视觉方向毕设或课程设计的学生,也适合想给班级、实验室、小团队搭一套本地签到工具的Python学习者。运行环境为Python 3.9以上、Windows 10/11,不需要GPU。 使用时先pip install -r requirements.txt装齐依赖,再运行download_data.py下载模型,最后启动main.py即可进入图形界面;命令行register、recognize、report子命令也可脱离界面单独调用。 立即下载

相关推荐

【无人机航测】MATLAB重叠率与地面分辨率协同设计:航线间距及飞行方向优化系统 MATLAB 无人机航测重叠率设计|地面分辨率与航线间距计算

内容概要:本文档介绍了基于MATLAB R2025b开发的无人机航测重叠率与航线间距计算系统,旨在通过建立统一的航测几何计算体系,实现重叠率、地面分辨率与航线间距的动态协同设计。系统结合相机参数、飞行参数、地形数据与风场信息,通过自动化候选航向搜索与多目标优化,选择兼顾覆盖质量、飞行效率与安全性的最优航线方向。项目涵盖从参数输入、摄影测量计算、地形与安全修正,到候选路线生成、综合评价与结果可视化的全流程,并构建了五万组模拟数据用于算法验证与模型训练,支持桌面交互、批量处理与服务化部署,适用于多种复杂场景下的无人机航测任务规划。 适合人群:具备一定MATLAB编程基础和摄影测量知识的科研人员、工程技术人员及高校师生,尤其适合从事无人机航测、地理信息系统(GIS)、遥感与测绘等相关领域的从业者。 使用场景及目标:① 实现无人机航测任务中地面分辨率与航线间距的精确计算与动态优化;② 解决复杂地形与风场环境下航线方向选择困难、覆盖质量难以保障的问题;③ 通过自动化设计减少人为经验依赖,提升航测任务的可靠性与效率;④ 为后续的三维建模、正射影像生成与灾害应急评估等应用提供高质量的数据基础。 阅读建议:建议读者结合文中提供的完整代码示例与GUI界面设计,逐步实践参数配置、模型计算与结果分析流程。重点关注摄影测量公式推导、地形修正策略与多目标优化算法的实现细节,并利用模拟数据进行敏感性分析与模型验证,以深入理解系统的设计理念与工程应用价值。

cannot be applied to

错误示例:代码块public class Test { public static void main(String[] args) { test(111); } public static void test(String str) { System.out.println(str); } } 错误分析test(String str)

expect521的博客 4万+

【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例

内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。

cannot be applied to (org.apache.xpath.operations.String)

IDEA开发过程中遇到这个问题,是因为两个类有冲突 ,jvm不知道要使用哪一个, 你的java文件中引入了 org.apache.xpath.operations.String ; 而 java.lang.String 是默认引入的...

东路、太阳的博客 4191

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

Swift中推送通知设置:Binary operator '|' cannot be applied to two UIUserNotificationType operands 错误解决

在swif2.0中,推送设置不能使用|,  如果这么:let setting = UIUserNotificationSettings(forTypes: .Alert|.Badge|.Sound, categories: nil )  会提示错误 :Binary operator '|' cannot be applied to two UIUserNotificationType o

hsf_study的博客 2944

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

Java Hibernate查询数据显示在jsp页面

项目添加Struts2容器,使用标签s:iterator来遍历输出。index.jsp&lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&gt; &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;!DOCTYPE HTML&

都随它大小便吧 8191

【顶级EI复现】基于KKT条件与分段解析优化的双有源桥DC-DC变换器软开关协同最小应力闭环控制方法(Simulink仿真实现)

内容概要:本文详细介绍了一种基于KKT(Karush-Kuhn-Tucker)最优性条件与分段解析优化技术的双有源桥(DAB)DC-DC变换器闭环控制方法,旨在实现软开关条件下器件电压和电流应力的协同最小化,从而提升变换器的转换效率与系统可靠性。该方法通过建立精确的数学模型,结合KKT条件进行优化求解,并采用分段解析策略提高实时控制性能,在Simulink环境中完成了完整的闭环控制系统建模与仿真验证。作为“顶级EI复现”级别的研究成果,内容涵盖控制算法设计、优化机制分析、仿真架构搭建及结果对比,具有较强的理论深度与工程应用价值,适用于电力电子高频化、高效化发展的前沿研究方向。; 适合人群:面向具备电力电子、自动控制或电气工程等相关专业背景,熟悉Simulink仿真平台,且从事科研工作1年以上的研究生、博士生及科研人员;特别适合致力于DC-DC变换器拓扑优化、软开关技术、最小化开关应力控制、能量高效传输等领域研究的专业人士。; 使用场景及目标:① 复现高水平EI期刊论文中的先进优化控制算法;② 掌握KKT条件在非线性约束优化问题中的具体应用;③ 深入理解DAB变换器在不同工况下的软开关实现机制与应力抑制策略;④ 构建高精度仿真模型以支撑学术论文撰写、科研项目申报或实际工程系统的控制方案设计。; 阅读建议:建议结合提供的Simulink仿真模型同步学习,重点关注KKT条件推导过程与分段解析优化模块的实现逻辑。由于内容涉及较强的数学建模与优化理论,推荐具备扎实的电路理论、现代控制理论及数值优化基础后再行研读,并可参考同系列“顶级EI复现”资源以构建系统性知识体系。

交错并联图腾柱PFC变换器仿真设计(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的“交错并联图腾柱PFC变换器”仿真设计,聚焦于高效率功率因数校正技术的建模与实现。内容涵盖双闭环控制策略(电压外环与电流内环)、PI控制器设计、交错并联结构优化以及图腾柱拓扑的工作原理,旨在提升系统动态响应性能、降低输入电流谐波含量并改善功率因数。文档不仅提供详细的仿真模型构建流程,还配套Mathcad计算书用于参数设计与功率等级扩展,并列举了多种相关电力电子变换器的仿真案例,如三相维也纳整流器、LLC谐振变换器、双向Buck-Boost电路等,形成了一套完整的电力电子系统仿真资源体系,适用于从理论分析到工程实践的全流程学习与研究。; 适合人群:电气工程、自动化、电力电子及相关专业的高校本科生、研究生,以及从事新能源发电、电源设计、电能质量治理、工业自动化等领域的研发工程师;具备基本电路理论知识和Simulink/Matlab使用经验者更佳。; 使用场景及目标:①支持高校课程设计、毕业设计或科研项目中对先进PFC拓扑的仿真验证与性能优化;②帮助工程技术人员快速掌握图腾柱PFC的核心控制逻辑与建模方法,缩短产品开发周期;③作为电力电子系统教学与技术培训的标准化参考案例,强化理论与实践结合能力。; 其他说明:文档由“荔枝科研社”整理发布,所有资源可通过指定公众号或百度网盘链接获取,建议按照目录顺序系统学习,并结合提供的Mathcad计算书、参考文献及仿真文件进行参数验证与二次开发,以深化理解与应用能力。

Hibernate+Struts应用程序的JavaWebStudio 2005下快速、可视化开发 (转)

Hibernate+Struts应用程序的JavaWebStudio 2005下快速、可视化开发 Struts中文论坛:http://www.javawebstudio.com/ JavaWebStudio 2005下载地址:http://www.javawebstudio.com/bbs/dispbbs.asp?boardID=5&ID=3&page=1   [目标]

zk_2000的专栏 776

超全Mathcad全桥LLC谐振变换器开关电源设计mathcad计算书

内容概要:本文介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,该模型基于Plecs仿真平台构建,完整实现了全桥LLC谐振变换器的电路拓扑与控制系统,用于深入研究其在变频与移相混合控制策略下的动态行为。模型涵盖了软开关实现机制、谐振腔参数设计、功率传输特性、效率优化以及闭环控制策略等核心内容,支持对启动过程、负载突变、频率调节等工况的仿真分析,有助于全面掌握LLC变换器在高效率、高功率密度电源系统中的工作原理与设计方法。; 适合人群:具备电力电子技术基础、熟悉开关电源设计原理的研究生、硬件工程师及从事高频电源产品研发的技术人员。; 使用场景及目标:①用于高校教学与科研中对LLC谐振变换器运行机理的深入理解与验证;②辅助工程师在实际产品开发中进行关键参数设计、性能预测与优化;③支持对变频控制、软启动过程、零电压开关(ZVS)实现条件、负载调整率及系统稳定性等关键指标的仿真分析与验证。; 阅读建议:建议使用者具备Plecs或类似电力电子仿真软件的操作经验,结合经典电力电子教材与LLC设计指南进行学习,通过调整谐振元件参数、开关频率与负载条件,观察系统响应变化,以深化对谐振变换器非线性动态特性的理解,并建议将仿真结果与理论计算对照分析,提升工程设计能力。

JavaWebStudio 2005新感觉

特别说明:                   如果文中某图片显示不出来,只有空的框,请点击鼠标右键选择“显示图片”即可显示出来,这可以是服务器的原因。由于这里上传图片太麻烦,所以没有加入所有的图片,详情见http://javawebstudio.51.net/J2005.htm_____________________________________________JavaWebStudio 2

kui的专栏 3643

game.c.docx

game.c.docx

无线通信入门:3种键控法(ASK/FSK/PSK)原理图解与实战对比

本文深入解析无线通信中ASK、FSK、PSK三种基础键控法的原理与应用。通过图解对比,阐明幅移键控(ASK)简单低成本但抗干扰差,频移键控(FSK)稳健且应用广泛,相移键控(PSK)高效但复杂。文章结合实战场景,为物联网和嵌入式开发者在选型时提供关键指导,帮助平衡数据速率、成本、功耗与抗干扰需求。

weixin_29274969的博客 188

2021-05-14

方法名() in类名cannot be applied to (java.lang.String) be applied to用法错了,1,方法参数有问题。2,调用错方法了

m0_47637785的博客 752

多周期路径约束(set_multicycle_path )

1.由慢到快的多周期约束 如下图所示,发射时钟周期是接受时钟周期的4倍。默认情况下,按照1T原则来进行静态时序分析和布局布线的。即建立时间是在发射沿后的第一个捕获沿检查,而保持时间是同一时刻下源时钟和捕获时钟的触发边沿下检查的(建立时间检查边沿的前一个触发沿)。 但是这样导致的问题就是该路径过于苛刻,为了满足这条路径的要求,不得不放弃其他路径。或者根本没办法保证这个默认的约束。总之最终造成...

Arist. 5506

关于如何实现在整合struts2和hibernate4框架下实现many-to-one级联数据表在JSP页面中的输出

如何实现hibernate级联数据表的输出一直以来困扰了很多SSH框架初学者。笔者在这里结合自己的切身经历,提出hibernate和struts2配合使用的方法。

wwb44444的博客 690

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

Android性能优化之Android Profiler

在移动应用开发中,打造一个流畅、省电且不卡顿的用户体验是至关重要的。然而,随着应用功能的日益复杂,内存泄漏、CPU暴涨、网络卡顿以及电量消耗过快等问题常常化身为隐形杀手,悄悄吞噬着用户体验。为了帮助开发者精准定位并解决这些性能瓶颈,谷歌在Android Studio中集成了一款强大的一站式性能分析工具Android Profiler。Android Profiler作为Android Studio内置的实时数据可视化工具,支持运行在Android 5.0及更高版本的设备上。

xiangzhihong8的专栏 201
上一篇: JavaWebStudio开发文档网站及开发论坛
下一篇: Struts图像按钮设计
kui
kui
博客等级 码龄25年 199粉丝 25原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值