structs2中已经定义了servlet,我们创建自己的servlet时该如何使用

在Structs2中已经定义了Servlet,有些时候我们不需要再去写Servlet,但众所周知,Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务,有时候我们还是需要自己来定义我们的Servlet,我们需要用一个Action来转发自己的servlet,关于Servlet的使用我们有以下两种方法:
1、在servlet名称后面加上.servlet
统一在servlet后面加上.servlet结尾(包括web.xml配置文件中和页面上使用servlet的地方),比如web.xml中配置如下:

NewServlet
/New.servlet

2、使用Action来转发
我们在使用Structs2的时候,需要对web.xml文件进行配置,在配置文件时我们会把设置为/*,这样设置的时候所有的请求都会经过struts2,那么只要经过struts2就必须得有action与之对应,否则就会报错。所以在view层的jsp代码中直接访问/xxx/servlet/test就会报错找不到action,此处的内的内容需要和structs.xml中配置相同。
对于这种情况,我们只需要写一个action并在struts.xml文件中进行配置即可:
public class NewAction implements ActionSupport {
public String execute(){
return "成功";
}
}
在structs.xml中的配置如下:

....

/servlet/test

....

3、给Action添加后缀(常用)
如果不想改变前台jsp页面的访问地址,只能改变web.xml中的配置,原先struts2的设置为/*会拦截所有的请求,包括访问servlet,现在可以将struts2的改成 *.action,那么struts2会拦截所有后缀是 .action的请求,其他的就不会拦截了。这样的话,前台就可以直接访问/servlet/test了。不过访问struts2的url中必须都以 .action结尾,这样才能被struts2拦截到。
4、使用filter过滤servlet
①新建一个filter用于过滤servlet
public class ReDispatcherFilter implements Filter {
private ArrayList includes = new ArrayList();
@Override
public void destroy() { }
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain
chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String target = request.getRequestURI();
target=target.lastIndexOf("?")>0?
target.substring(target.lastIndexOf("/")+1,target.lastIndexOf("?")-
target.lastIndexOf("/")):target.substring(target.lastIndexOf("/") + 1);
if (this.includes.contains(target)) {
RequestDispatcher rdsp = request.getRequestDispatcher(target);
rdsp.forward(req,resp);
}else
chain.doFilter(req, resp);
}
@Override
public void init(FilterConfig config) throws ServletException {
this.includes.addAll(Arrays.asList(config.getInitParameter("includeServlets").spl it(", ")));
}
}
②在web.xml中做适当配置,在struts2的配置前加上下面的代码:

redisp
com.kcjxkj.filter.ReDispatcherFilter

includeServlets
ValidateEmail



redisp
/*

其中,中为web.xml中配置的要过滤的servlet名,多个之间用","逗号隔开。

你可能感兴趣的:(Java,EE框架开发技术,servlet,struts,框架)