一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
今天,我来说说在前后端交互中,后台如何给前端提供接口,如何分析前端传过来的数据。
传纸条
把同学A看成前端,把同学B看成后端,那么在我们实现后端提供接口,分析数据,返回数据给前端是否也会像同学B接收同学A的纸条那样实现呢?让我分析分析,一探究竟。
1、后台如何提供接口给前端?
Servlet提供接口,要处理HTTP请求继承HttpServlet类。Servlet将会接收到HTTP请求并执行某种处理。
1、servlet2.5 ,在web.xml中配置映射关系,web.xml中配置的url-pattern,提供给前端访问,在前端中通过url发送请求访问,通过映射,Servlet就能接收到前端的请求。
2、servlet3.0 ,使用注解给前端提供接口,前端通过该接口向后端发送请求访问
后端提供接口给前端建议在web.xml中配置映射关系,这种方式便于管理,使用注解会暴露一个在项目根路径下的接口。
问题:后台的接口暴露了,岂不是谁都可以访问 我们可以设置过滤器(Fliter),来过滤一些不正当的请求。因为一个请求对应一个Servlet,请求多了就很麻烦,我们可以设置映射地址,实现一个servlet处理多个请求。
UserFilter继承了Filter类,实现过滤方法doFilter(),在web.xml中配置拦截路径。
doFilter方法专门用来拦截请求,做权限检查的。
这里实现的是拦截没有登录用户的访问
public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpSession session = httpServletRequest.getSession();
Object user = session.getAttribute("user");
if (user == null) {
httpServletRequest.getRequestDispatcher("/login.jsp")
.forward(httpServletRequest,servletResponse);
return;
} else {
filterChain.doFilter(servletRequest,servletResponse);
}
}
<filter>
<filter-name>Userfilter</filter-name>
<filter-class>com.filter.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Userfilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
2、后端如何分析前端传过来的数据
@WebServlet("/addFbackServlet")
public class AddFbackServlet extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String fbacktitle = request.getParameter("fbacktitle");
String fbackcontent=request.getParameter("fbackcontent");
int userid=Integer.parseInt(request.getParameter("userid"));
String fbacktime = new GetTime().gettime();
EpFeedback feedback= new EpFeedback(fbacktitle,fbackcontent,userid,fbacktime);
IEpFeedbackDao feedbackDao= new EpFeedbackDao();
feedbackDao.insert(feedback);
response.setContentType("text/html;charset=UTF-8");
request.getRequestDispatcher("queryAllFbackServlet").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
后端getParameter()接收前端传过来的参数,后端便会根据处理数据所需拿去所需的数据。 在post提交中会把数据封装还在传递,在传递数据时需要注意数据类型一致。一般使用JSON类型传递。 这一篇有许多整理得不太好的,有好多东西知道如何去实现,却不会用准确的语言表达,感谢阅读,如有错误,还请指正!!!