1. web.xml配置方法路径
你的实际目的,是一个Servlet,如果处理相关的多种业务。
比如管理用户的Servlet,包括创建,更新,删除,查询等。
正确的方法是多传个参数。
在Servlet的Service方法里,取出参数值,根据取值做分支。
例如if("printstr".equals(op)){
printstr(request,response);
}
注意处理各种业务的方法,必须传参HttpServletRequest和HttpServletResponse。不要传String。
2. spring如何动态加载配置文件,就是配置文件修改了,application.xml如何能读取到
项目,需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,在网上找了很多资料,最后找到了适合我的方法,下面总结一下。
spring的配置文件是在容器启动的时候就加载到内存中的,如果手动改了application.xml,我们必须要重新启动服务器配置文件才会生效。而在spring中提供了一个类WebApplicationContext,这个类可以让你获得一些bean,可以修改内存中的信息,我就是通过这个类来实现的。下面是我具体的代码。
package com.southdigital.hospital;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ChangeSpringConfig extends HttpServlet
{
private String ipAddress = "127.0.0.1";
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//先取得servleContext对象,提供给spring的WebApplicationUtils来动态修改applicationContext.xml
ipAddress = request.getParameter("ipAddress");
System.out.println(ipAddress);
ServletContext servletContext = this.getServletContext();
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource");
cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh");
}
}
注意:通过这种方法修改applicationContext.xml文件的时候用c3p0,而不可以用dbcp,dbcp不支持动态修改读取到内存里面的数据。
spring 3.1已经支持了。
3. 关于java中xml文件配置的路径问题
嗯,是过滤,在这个里面实现了些什么?
这个问题太大
了,而且这是struts2,更加复杂。在里面做了很多事情,最起码的
至少有加载你的struts.xml配置文件,解析你的配置文件,然后通过你的请求路径,找到相应的action,封装你的表单数据等等,还有很多过滤器。。。struts2不是一两句能说完的,看看源代码吧,如果看得懂,就知道做了什么了
4. web.xml中相关配置
在web.xml中通过contextConfigLocation配置spring,contextConfigLocation参数定义了要装入的 Spring 配置文件
部署applicationContext.xml文件
如果不写任何参数配置,默认的是在/WEB-INF/applicationContext.xml
如果指定了要加载的文件,则会去歼咐加载相应的xml,而不会去加氏慧纯载/WEB-INF/下的applicationContext.xml。如果没有指定的话,碧皮默认会去/WEB-INF/下加载applicationContext.xml。
如果想要自定义文件名,需要在web.xml中加入contextConfigLocation这个context参数
springmvc的默认配置文件是放在WEB-INF下的,并且要命名为 -servlet.xml, 为servlet—name,即下文中的"Springmvc"
web.xml文件中webAppRootKey属性是web项目的绝对路径,默认值是webApp.root,可以通过System.getProperty(“webApp.root”)来获取属性值或者在配置文件中通过${webApp.root}获得。
Spring通过 org.springframework.web.util.WebAppRootListener 这个监听器来注入项目路径,因此部署在同一个web容器中的项目,要配置不同的param-value(比如”项目名.root”),不然会造成冲突。但是如果在web.xml中已经配置了org.springframework.web.util.Log4jConfigListener这个监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能。WebAppRootListener要在ApplicationContext的ContextLoaderListener之前,否则ApplicationContext的bean注入根目录值时会发生无法注入异常。
"webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。
可以用System.getProperty("webapp.root")来动态获项目的运行路径。
一般返回结果例如:/usr/local/tomcat6/webapps/项目名
定义以后,在Web Container启动时将把ROOT的绝对路径写到系统变量里。
然后log4j的配置文件里就可以用${webName.root }来表示Web目录的绝对路径,把log文件存放于webapp中。
此参数用于后面的“Log4jConfigListener”-->
5. xml解析项目中的xml文件,路径如何写
将要访问的外部文件直接放在代码包里面是一个大忌,在代码中用相对路径也是一个大忌,因为在运行的时候是去运行的class文件而不是源文件。要解决这个问题,首先楼主要知道当一个虚拟机启动以后它的工作目录是什么目录。在eclipse下面默认的工作目录就是工程的根目录。那么你如果想正确的访问文件,你就要从根目录开始写路径。最好的做法是在根目录下面建一个文件夹,在这里面专门放置要访问的文件。比如你在工程根目录下面建立一个resource文件夹,将records.xml放在这个文件夹里面,就可以用resource/records.xml来访问。为了程序的跨平台,最好将/用File.separator来替代
6. eclipse无法配置web.xml文件
前言 刚开始学习部署tomcat,新建java web项目后发现没有web.xml配置文件,以下是原因及其解决方案。 产生原因及解决方案 新建web项目时如下图所示,若直接选择"完成",则默认不会在WebContent/WEB-INF文件夹下生成web.xml配置文件,此时应选择下一步 在创建项目时勾选同时产生web.xml文件即可;当然也可以让已经新建的web项目生成web....
查看原文
在eclipse中快速生成一个maven项目后一键生成web.xml
在web工程创建时创建web.xml:用Eclipse新建一个web项目没有自动生成web.xml 在创建maven工程时,大多没有创建web.xml文件,web.xml路径:src/main/webapp/EWB-INF/web.xml 创建web.xml:右键项目——>javaEE tools——>点击第二个Generate
利用eclipse新建的java web项目没有web.xml文件怎么办?
利用eclipse新建的java web项目没有web.xml文件怎么解决? 解决办法: 1、右键项目名称-》Java EE Tools-》Generate Deployment descriptor stub 即可生成web.xml文件。
MyEclipse新建的Web项目没有web.xml
MyEclipse新建的Web项目没有web.xml 是因为创建项目时没有选择Generate web.xml deployment descriptor这一项。 下面是步骤 首先创建项目 这一步点击next 再点击next 勾选Generate web.xml deployment descriptor,完成后点击Finish,即可完成创建。 检查一下,在WebRoot文件夹下打开
myeclipse生成web.xml文件
MyEclipse中新建web项目时,如果一开始新建项目没有选中生成web.xml文件,在WebRoot->WEB-INF文件夹下就没有web.xml文件。 那如果后面又需要用到web.xml该怎么办呢?难道需要重新建项目?其实是不用的。 非常简单的方法就是在需要添加web.xml文件的项目上右键点击,依次选择MyEclipse->Generate Deployment
7. web配置读取xml文件报找不到路径
相对路径的话,来可以先获取到源当前文件的编译路径,之后在找到想找文件的路径的思路来实现。
举例:
XMLS.class.getClass().getResourceAsStream("/test/test.xml");
解释:XMLS.class.getClass()是获取当前的类编译路径,之后通过getResourceAsStream的形式即可找到要读取的文件的路径。
备注:这个方法中后面的路径也可以通过截取的形式来进行路径获取,实现原理都是找到当前类路径,之后通过相对位置找到另外文件路径。
8. IDEA 无法读取项目的xml配置文件,找不到路径是为什么
1.将所有资源文件放在resources文件夹下
这样做很方便,比较容易想到,但是层次性就很差了,比如专mybatis的映射配置文件mapper.xml,本属来需要放在特定的包里面,与层,service层等层次为同一个层级,如今只能放在resource文件夹下,不方便分层;
2.如果该项目是maven项目:
配置maven的pom文件配置,在pom文件中找到<build>节点,添加下列代码:
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>
我尝试过将directory修改为具体的放置配置文件的包,即修改成 src/main/java/lj/ncepu/mapperXML,然后<include>标签里面也做了很多修改和尝试,始终无法访问到配置文件;