您的位置:首页 > 其它

1.servlet的方法分发

2020-04-05 07:23 417 查看
@Slf4j
@WebServlet("/user/*")   // 就是想把方法分发到 register 和 login 那么怎么解决
public class UserServlet extends BaseServlet {
private UserService userService = new UserServiceImpl();
private static final String USER_STATE = "Y";
private ResultInfo info = new ResultInfo();

/**
* 用户注册功能
*/
public void register(HttpServletRequest request, HttpServletResponse response) throws IOException, InvocationTargetException, IllegalAccessException {

}

/**
* 用户登录功能
*/
public void login(HttpServletRequest request, HttpServletResponse response) throws InvocationTargetException, IllegalAccessException, IOException {

}
}

user/register
user/login 如果实现了分发到方法中去 ,那么就可以少写 servlet 也方便了代码维护需要

**
* 方法增强
*/
@Slf4j
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) {
//完成方法分发
//1.获取请求路径 user/add
String uri = req.getRequestURI();
log.info( "当前请求uri:{}", uri );
//2.获取方法名称
String methodName = uri.substring( uri.lastIndexOf( '/' ) + 1 );
//3.获取方法对象Method
//谁调用我?我代表谁 UserServlet的对象cn.yiyayiya.travel.web.servlet.UserServlet@4903d97e
//log.info( "当前为{}对象进行访问", this );
try {
//获取方法
Method method = this.getClass().getMethod( methodName, HttpServletRequest.class, HttpServletResponse.class );
//4.执行方法
//暴力反射
//method.setAccessible(true);
method.invoke( this, req, resp );
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}

/**
* 直接将传入的对象序列化为json,并且写回客户端
*
* @param obj 传入的对象
*/
public void writeValue(HttpServletResponse response, Object obj) throws IOException {
response.setContentType( "application/json;charset=utf-8" );
PrintWriter writer = response.getWriter();
JSON.writeJSONString( writer, obj );
writer.close();
}

/**
* 将传入的对象序列化为json,返回
*
* @param obj 传入的对象
* @return
*/
public String writeValueAsString(Object obj) {
return JSON.toJSONString( obj );
}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
cs温柔 发布了12 篇原创文章 · 获赞 0 · 访问量 316 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: