1.Javaweb-servlet&filter

    科技2022-07-15  128

    Servlet

    准备工作

    IDEA通过maven创建webapp项目

    创建一个空的maven项目,然后通过maven方式创建webapp的module <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>javax.servlet.jsp.jstl-api</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- 把src/main/java和src/main/resources目录下所有的资源文件都一起打包 --> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.config</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.config</include> </includes> <filtering>true</filtering> </resource> </resources> </build>

    直接通过maven方式,创建webapp archetype的项目

    Servlet

    servlet可以看成是Controller,接收页面传递的参数及调用service层方法

    编写servlet后,需要在web.xml中注册(servlet需要继承HttpServlet,重写doGet()和doPost()方法)

    public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String userCode = req.getParameter("userCode"); String userPassword = req.getParameter("userPassword"); UserService userService = new UserServiceImpl(); User user = userService.login(userCode, userPassword); if (user != null && userPassword.equals(user.getUserPassword())) { req.getSession().setAttribute(Constants.USER_SESSION, user); resp.sendRedirect("jsp/frame.jsp"); } else { req.setAttribute("error", "用户名或密码错误"); req.getRequestDispatcher("login.jsp").forward(req, resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } <!-- 用户登录servlet --> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>com.richard.servlet.user.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping>

    Filter

    前端页面和servlet之间的交互,都需要经过filter,可以使用filter进行字符编码过滤;用户未登录过滤跳转等统一操作

    编写好filter之后,同样需要在web.xml中注册

    public class CharacterEncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } } <!-- 字符编码过滤器 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>com.richard.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> public class SysFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; User user = (User) req.getSession().getAttribute(Constants.USER_SESSION); if (user == null) { resp.sendRedirect(req.getContextPath() + "/login.jsp"); } else { filterChain.doFilter(req, resp); } } @Override public void destroy() { } } <!-- 用户登录过滤器 --> <filter> <filter-name>sysFilter</filter-name> <filter-class>com.richard.filter.SysFilter</filter-class> </filter> <filter-mapping> <filter-name>sysFilter</filter-name> <url-pattern>/jsp/*</url-pattern> </filter-mapping>
    Processed: 0.008, SQL: 8