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

在Structs2中已经定义了Servlet,有些时候我们不需要再去写Servlet,但众所周知,Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务,有时候我们还是需要自己来定义我们的Servlet,我们需要用一个Action来转发自己的servlet,关于Servlet的使用我们有以下两种方法:
1、在servlet名称后面加上.servlet
统一在servlet后面加上.servlet结尾(包括web.xml配置文件中和页面上使用servlet的地方),比如web.xml中配置如下:
<servlet-mapping>
<servlet-name>NewServlet</servlet-name>
<url-pattern>/New.servlet</url-pattern>
</servlet-mapping>
2、使用Action来转发
我们在使用Structs2的时候,需要对web.xml文件进行配置,在配置文件时我们会把<url-pattern>设置为/*,这样设置的时候所有的请求都会经过struts2,那么只要经过struts2就必须得有action与之对应,否则就会报错。所以在view层的jsp代码中直接访问/xxx/servlet/test就会报错找不到action,此处的<url-pattern>内的内容需要和structs.xml中<result>配置相同。
对于这种情况,我们只需要写一个action并在struts.xml文件中进行配置即可:
public class NewAction implements ActionSupport {
public String execute(){
return "成功";
}
}
在structs.xml中的配置如下:
<package name="test" namespace="/" extends="struts-default">
....
<action name="test" class="com.xxx.action.NewAction">
<result>/servlet/test</result><!--result配成servlet的url-pattern即可-->
</action>
....
</package>
3、给Action添加后缀(常用)
如果不想改变前台jsp页面的访问地址,只能改变web.xml中的配置,原先struts2的<url-pattern>设置为/*会拦截所有的请求,包括访问servlet,现在可以将struts2的<url-pattern>改成 *.action,那么struts2会拦截所有后缀是 .action的请求,其他的就不会拦截了。这样的话,前台就可以直接访问/servlet/test了。不过访问struts2的url中必须都以 .action结尾,这样才能被struts2拦截到。
4、使用filter过滤servlet
①新建一个filter用于过滤servlet
public class ReDispatcherFilter implements Filter {
private ArrayList<String> includes = new ArrayList<String>();
@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的配置前加上下面的代码:
<filter>
<filter-name>redisp</filter-name>
<filter-class>com.kcjxkj.filter.ReDispatcherFilter</filter-class>
<init-param>
<param-name>includeServlets</param-name>
<param-value>ValidateEmail</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>redisp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其中,<param-value></param-value>中为web.xml中配置的要过滤的servlet名,多个之间用","逗号隔开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值