小编Dav*_*ley的帖子

如何在一个Spring应用程序中的web.xml中注册多个servlet

我想在我的Spring web.xml中定义两个servlet - 一个用于应用程序html/jsp页面,另一个用于将由外部应用程序调用的Web服务.这是web.xml:

<servlet>
  <servlet-name>myservlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>myservlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>WEB-INF/user-service-servlet.xml</param-value>
</context-param>

<servlet>
  <servlet-name>user-webservice</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>user-webservice</servlet-name>
  <url-pattern>/UserService/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

如果我有myservlet自己在文件中使用DispatcherServlet,它工作正常.如果我的user-webservice带有context-param,它的配置文件(user-service-servlet.xml),它可以正常工作.但是,如果我在文件中都有,那么myservlet不起作用,因为myservlet-servlet.xml文件没有自动加载.如果我删除context-param,那么myservlet可以正常工作,但是user-webservice不能正常工作,因为它没有加载配置文件(user-service-servlet.xml).

如何定义两个servlet并加载它们的两个配置文件?

java spring web.xml servlets

28
推荐指数
2
解决办法
10万
查看次数

Log4j - 让多个appender写入同一个文件,并始终记录

我有一个log4j appender定义如下:

log4j.logger.com.example = DEBUG, filelog

log4j.appender.filelog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.filelog.File=c:/app.log
log4j.appender.filelog.layout=org.apache.log4j.PatternLayout
log4j.appender.filelog.layout.ConversionPattern=%d | %m%n
log4j.appender.filelog.DatePattern=.dd-MM-yyyy
Run Code Online (Sandbox Code Playgroud)

在我的班上,我得到了记录器:

Log logger = LogFactory.getLog(getClass());
Run Code Online (Sandbox Code Playgroud)

这工作正常.我希望有一个记录器,它总是记录某些消息(不是错误,而是事务所花费的时间).如果我在DEBUG或INFO中写这些,如果更改了日志级别,我将看不到它们.我想我可以使用写入同一文件的另一个appender来完成此操作.

这可能有两个appender写入同一个文件?我如何获得我想在同一个类中使用普通调试appender和事务性appender的logger实例?这些消息不会都在同一个包中,因此我无法将某个包配置为始终记录.我是否必须让这些appender写入不同的文件,或者我可以在代码中检索它们并具有以下内容:

Log alwaysLogger = LogFactory.getLog(ALWAYS);
alwaysLogger.debug("This message will always be written regardless of the level set on the filelog appender");
Run Code Online (Sandbox Code Playgroud)

更新 我可以根据需要写入两个不同的日志文件,但是如何在我的类中获取记录器实例?我不想将一个包/类配置为始终使用一个appender而不是另一个包,因为类必须在正常运行期间记录信息/错误消息和事务性"始终"消息.有没有办法完成我需要的东西,即使它写入两个不同的日志文件?

java logging log4j

8
推荐指数
1
解决办法
2万
查看次数

Spring - 从控制器调用custom-authentication-provider

我在Spring Security配置中定义了自定义身份验证提供程序.这个类实现了AuthenticationProvider,我可以使用我页面上定义的表单成功登录.问题是我想要不仅在登录页面上调用此类,而且还要从注册页面调用此类.

注册页面使用不同的命令类,并收集比登录表单更多的信息.现在,当用户注册时,我调用适当的控制器,将记录添加到数据库,然后他们可以登录,但他们没有自动登录.由于他们刚刚在注册页面上给我他们的用户名/密码,我可以将其传递给自定义AuthenticationProvider类,以便他们也登录吗?

我已经尝试在注册控制器中创建一个org.springframework.security.Authentication类,并在我的客户AuthenticationProvider类上调用authenticate方法,这不会出错,但是用户没有登录.我是否必须在Spring Security过滤器链中调用更高的方法来完成此操作?我应该将控制器重定向到j_spring_security_check URL吗?如果是这样,我将如何传递用户名/密码?

java spring spring-security custom-authentication

6
推荐指数
1
解决办法
5140
查看次数

在表单中有多个提交按钮,并确定在控制器中按下了哪个按钮

在我的Spring应用程序中,我有一个jsp,它有一个表单,我希望有多个提交按钮转到同一个控制器.我需要能够确定控制器中按下了哪个按钮.表单向用户显示多个项目,他们可以选择其中一个项目,唯一的区别是所选项目的ID.

在jsp中,我正在创建这样的表单:

<form:form method="post" commandName="myCommand">

    <c:forEach items="${model.availableitems}" var="item">
      <span class="item">${item.description}</span> 
      <input type="hidden" name="id" value="${item.ID}"/>
      <input type="submit" name="SelectButton" value="Select" />
    </c:forEach>

  </div> 
</form:form>
Run Code Online (Sandbox Code Playgroud)

但是,这在日志中给出了"数据绑定错误:1"消息,并且表单未提交给控制器.

我尝试将myCommand.id从int更改为String,但是当它提交时的值是id1,id2,id3 ...(逗号分隔列表中的所有ID),无法确定按下了哪个按钮.我不希望必须为每个按钮指定不同的操作,因为项目的数量可以增长,并且它们的操作完全相同,只是使用不同的ID.

如何在此表单中使用多个按钮并获取控制器中的值?

java spring jsp jstl

4
推荐指数
1
解决办法
1万
查看次数

Java - 如何在另一个列表的列表中查找项目数

说我有两个清单:

List<String>products = new ArrayList<String>(); 
products.add("computer"); 
products.add("phone"); 
products.add("mouse"); 
products.add("keyboard"); 

List<String>cart = new ArrayList<String>(); 
cart.add("phone"); 
cart.add("monitor"); 
Run Code Online (Sandbox Code Playgroud)

我需要找到产品列表中存在的购物车清单中有多少商品.对于上面的列表,答案是1(因为电话在产品和购物车中).如果购物车清单是:

List<String>cart = new ArrayList<String>(); 
cart.add("desk"); 
cart.add("chair"); 
Run Code Online (Sandbox Code Playgroud)

结果将是0.如果购物车包含计算机,鼠标,桌子,椅子,结果将是2(对于计算机和鼠标).

有什么东西在Apache的百科全书集合谷歌集合API?我仔细查看过它们,看看如何计算行李数,但不是从另一个列表,尽管我可能会遗漏一些东西.现在,我能想到的唯一方法是迭代购物车商品,看看产品是否包含单个商品并保持计数.我不能使用containsAll,因为我需要count(不是布尔值),如果购物车中的所有商品都不存在于产品列表中(这可能会发生),那么这将失败.

如果重要的话,我正在使用Java 1.6.

java list count java-6

4
推荐指数
2
解决办法
9543
查看次数

处理即将过期的航空里程的过程

我正在开发需要处理即将到期的航空里程的应用程序。可以使用里程,但是如果在某个日期之前未使用里程,它们将过期。我想确保我使适当的里程数过期,但是如果已经使用过,则不要使其过期。因此,我必须检查在给定的日期范围内是否使用了足够的里程,然后再终止里程。这是我最初的想法:

有一个包含以下各列的里程表:

  • user_id- 用户表的外键
  • number_miles- 该记录的英里数
  • miles_type- 指示是否添加,使用或过期了里程
  • miles_expire- 布尔值,指示这些里程是否过期
  • miles_date- 添加此记录的日期
  • exipration_date- 这些里程过期的日期(如果miles_expire标志为true)
  • 已处理-表示此记录是否已处理-仅在miles_type设置为过期时适用

如果每次从特定用户帐户添加,使用或过期里程时都有一条记录,我认为我可以这样计算过期里程:

  1. 对于每个用户,获取记录的日期,其中miles_expire标记设置为true,expiration_date当前日期之前为,processed标记设置为false。这将获取应该过期的所有里程的记录。
  2. expiration_date从上一个查询中获取第一个和最后一个。
  3. 使用expiration_date上一步中的第一个和最后一个值,获取该日期范围内所有已使用里程的列表。
  4. 如果上一步使用的英里数之和小于到期点之和,则使差值过期。如果使用的里程等于或大于英里,则不必过期。
  5. processed第一个和最后一个expiration_date范围内的所有记录的标志设置为true 。这些里程已过期或已被忽略。

看来这符合以下要求:

  • 首先使用有效里程
  • 它只会在与使用的里程相同的时间范围内检查使用的里程,因此过去使用很多里程不会节省未来的里程
  • 里程仅在日期之后过期,如果用户使用了足够的里程,则不会过期

我还需要考虑其他因素吗?这项工作会适当地使里程过期吗?

algorithm

3
推荐指数
1
解决办法
601
查看次数

SQL - 在具有多个where子句的单个查询中检索值

我有一个包含以下数据的表:

UserName | LastLogin 
-------------------------------
User1    | 2010-10-25 10:05:47
User2    | 2010-10-23 11:10:27
User3    | 2010-10-12 05:39:34
User4    | 2010-10-20 12:22:11
User5    | 2010-09-17 08:41:05
Run Code Online (Sandbox Code Playgroud)

我希望能够运行查询以获取在过去3天,过去7天和过去21天内登录的人数(我知道这些数字会重叠).我知道我可以通过运行查询来获得每个特定值(语法可能不是100%正确):

SELECT COUNT(*) 
  FROM login 
 WHERE LastLogin >= DATEDIFF(NOW(), LastLogin, INTERVAL 3 DAY);
Run Code Online (Sandbox Code Playgroud)

我可以运行查询以在一个查询中返回所有三个值吗?GROUP BY是否可以工作,还是可以使用嵌套查询?使用指定的不同间隔运行查询三次是否同样有效?

mysql sql date-manipulation

2
推荐指数
1
解决办法
1238
查看次数

访问 - 选择只有一列不同的不同记录

我有一个Access表,其中包含两列(ID和Active),其数据如下所示:

ID  |  Active
------------
123 | 0
124 | 0
125 | 0
123 | 1
314 | 1
948 | 1
Run Code Online (Sandbox Code Playgroud)

我想选择具有唯一ID(仅存在一次,而不仅仅是第一次存在)的不同记录,但我还需要Active值.如果我做了

SELECT DISTINCT ID from table1
Run Code Online (Sandbox Code Playgroud)

我得到了唯一的ID,但不是表格.它还返回123表中不唯一的.如果我做:

SELECT DISTINCT * from table1
Run Code Online (Sandbox Code Playgroud)

如果它们具有不同的Active值,我会获得重复的ID.我需要一个查询来获取唯一ID及其相关的Sheet值.它将返回以下内容:

ID  |  Active
------------
124 | 0
125 | 0
314 | 1
948 | 1
Run Code Online (Sandbox Code Playgroud)

我是否需要将它们放入两个不同的表并进行外连接?活动只有0或1.

select unique ms-access-2007

0
推荐指数
1
解决办法
4万
查看次数