css样式失效

css样式失效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/login.css">
        <script type="text/javascript">
            function data_Judge(){
                // 获得用户名的值
                var username = document.getElementById("name").value;
                if(username == null || username==""){
                    alert("用户名不能为空");
                    return false;
                }
                // 获得密码的值
                var password = document.getElementById("pwd").value;
                if(password == null || password==""){
                    alert("密码不能为空");
                    return false;
                }
                //获得验证码的值
                var code = document.getElementById("code").value;
                var length = code.length;
                if(length != "5"){
                    alert("验证码格式有误");
                    return false;
                }
                 
            }
           
          //点击更换图片函数
          function changeImg(){
           var codeImg = document.getElementById("codeImg");
           /* 使用第三方直接获取验证码 */
           codeImg.src="${pageContext.request.contextPath}/KaptchaServlet?time=" + new Date().getTime();
       }
        </script>
</head>
<body>
    <div class="login">
        <div class="header">
            <h1>
                <a href="/login.do">登录</a>
                <!-- 如果登入失败 msg就会被赋值并提示错误信息 -->
                <p style="color:red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${ msg }</p>
            </h1>
            <button></button>
        </div>
        <form action="${pageContext.request.contextPath}/LonginServlet" method="post" onsubmit="return data_Judge()">
            <div class="name">
                <input type="text" id="name" name="username">
                <p></p>
            </div>
            <div class="pwd">
                <input type="password" id="pwd" name="password">
                <p></p>
            </div>
            <div class="code">
                <input type="text" id="code" name="verifyCode" style="width: 150px">
                &nbsp;&nbsp;&nbsp;&nbsp; <img id="codeImg" onclick="changeImg()" src="${pageContext.request.contextPath}/KaptchaServlet" style="width: 150px; height: 42px; vertical-align: middle;">
                <p></p>
            </div>
            <div class="btn-red">
                <input type="submit" value="登录" id="login-btn">
            </div>
        </form>
    </div>
</body>
</html>

http://img1.sycdn.imooc.com//climg/5dee3e410988349b19190739.jpg

1
老师 刚才打开Ec'licpse的是时候打开浏览器输入地址样式就全部失效了  地址好像也没问题


正在回答

登陆购买课程后可参与讨论,去登陆

11回答

同学你好,1、< url-pattern >/* < url-pattern > 中/* 能匹配所有请求URL,会匹配到servlet(/login)、*.jsp、*.js、*.css和*.html,所以直接设置/*也有可能会拦截到css文件的请求响应。

        2、比如页面中<script src="http://地址:端口/项目名/文件名.js"></script>,这就是一个html请求访问这个js文件的一个请求。

        3、jsp引入css有请求和响应嘛

jsp页面引入一个文件,当项目启动后,在页面中访问时,浏览器会向页面发送请求访问这个css文件,服务器通过请求,将这个css文件的内容响应给浏览器的html页面。这就是引入css内容在浏览器执行的一次过程。

        4、如果要绕开css我应该怎样编写这个<url-pattern>拦截路径

同学可以尝试如下方法过滤对应的页面,比如:

http://img1.sycdn.imooc.com//climg/5def6d450919c84807380402.jpg

修改后重启,再试一下。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • jia_蛙 提问者 #1
    老师麻烦看一下回复
    2019-12-10 18:27:04
提问者 jia_蛙 2019-12-10 21:40:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>book_system</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>login.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
   
   <!-- 配置初始化用户账户参数 -->
  <context-param>
    <param-name>account</param-name>
    <param-value>admin</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>huangzhou</param-value>
  </context-param>
   
  <!-- 对kaptcha第三方验证码生成包进行配置 -->
  <servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
     
    <!--去掉干扰线 -->
    <init-param>
      <param-name>kaptcha.noise.impl</param-name>
      <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
    </init-param>
     
    <!--更换干扰样式 这里可以使用阴影效果 ShadowGimpy -->
    <init-param>
      <param-name>kaptcha.obscurificator.impl</param-name>
      <param-value>com.google.code.kaptcha.impl.ShadowGimpy</param-value>
    </init-param>
  </servlet>
   
  <servlet-mapping>
    <servlet-name>KaptchaServlet</servlet-name>
    <url-pattern>/KaptchaServlet</url-pattern>
  </servlet-mapping>
  
   <!-- 字符集的过滤器 -->
  <filter>
    <filter-name>CharacterFilter</filter-name>
    <filter-class>com.zhou.web.filter.CharacterEncodingFilter</filter-class>
    <!-- 过来参数化设置 -->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <!-- 设置多个拦截路径  -->
  <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/page/*</url-pattern>
  </filter-mapping>
 <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/login.jsp</url-pattern>
  </filter-mapping
    <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/AddCategoryServlet</url-pattern>
  </filter-mapping>
   
  <!--登录过滤器 --> 
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.zhou.web.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/page/*</url-pattern>
  </filter-mapping>
   
 
</web-app>
1
2
3
4
5
6
老师我刚才直接对添加分类的servlet进行了拦截, 现在有用了,回想起来,一开始,我先是因为
在字符解过滤器中设置了拦截全部,然后是css样式失效,然后接着直接根据老师的指导,直接拦截
对应的sevlet,现在有用了,我想问一下,<url-pattern>/page/*</url-pattern>和
  <url-pattern>/login.jsp</url-pattern> 是拦截对应的页面里面传入的数据是吧! 我在添加
  分类的页面上已经可以拦截到这个页面,案例说传入到添加分类的servlet中的数据已经是utf-8
  的了,为什么我们还需要到添加分类的sevlet进行拦截才能生效?这个我有点不理解


  • 同学你好,1、<url-pattern>/page/*</url-pattern>是拦截所有page文件夹下访问页面的所有请求。<url-pattern>/login.jsp</url-pattern>拦截login.jsp页面的所有请求。所以这两个拦截并没有对所有的Servlet进行过滤。2、如上所示在添加分类的jsp页面中添加了过滤,而AddCategoryServlet是一个Servlet,并没有对它进行过滤,所以字符过滤器并没有对AddCategoryServlet进行过滤。在字符过滤器中添加对AddCategoryServlet的过滤后,就会解决AddCategoryServlet的字符乱码问题。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-12-11 10:41:41
提问者 jia_蛙 2019-12-10 19:52:21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>book_system</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
   
   <!-- 配置初始化用户账户参数 -->
  <context-param>
    <param-name>account</param-name>
    <param-value>admin</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>huangzhou</param-value>
  </context-param>
   
  <!-- 对kaptcha第三方验证码生成包进行配置 -->
  <servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
     
    <!--去掉干扰线 -->
    <init-param>
      <param-name>kaptcha.noise.impl</param-name>
      <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
    </init-param>
     
    <!--更换干扰样式 这里可以使用阴影效果 ShadowGimpy -->
    <init-param>
      <param-name>kaptcha.obscurificator.impl</param-name>
      <param-value>com.google.code.kaptcha.impl.ShadowGimpy</param-value>
    </init-param>
  </servlet>
   
  <servlet-mapping>
    <servlet-name>KaptchaServlet</servlet-name>
    <url-pattern>/KaptchaServlet</url-pattern>
  </servlet-mapping>
   
  <!--登录过滤器 --> 
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.zhou.web.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/page/*</url-pattern>
  </filter-mapping>
   
  <!-- 字符集的过滤器 -->
  <filter>
    <filter-name>CharacterFilter</filter-name>
    <filter-class>com.zhou.web.filter.CharacterEncodingFilter</filter-class>
    <!-- 过来参数化设置 -->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <!-- 设置多个拦截路径  -->
  <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/page/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/login.jsp</url-pattern>
  </filter-mapping>
    <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/page/addCategory.jsp</url-pattern>
  </filter-mapping>
</web-app>
1
2
把<url-pattern>改为<url-pattern>/<url-pattern> 是什么意思  ?我跟老师你说的对添加新分类
的servlet的过滤 还是乱码

http://img1.sycdn.imooc.com//climg/5def86f209c19e7913220236.jpg

提问者 jia_蛙 2019-12-10 18:26:44

http://img1.sycdn.imooc.com//climg/5def72220976f31611820587.jpg

http://img1.sycdn.imooc.com//climg/5def726b0914901d00000000.jpg

1
2
已经解决css样式失效了,但是发现添加新分类的时候 分类名称还是乱码,我后台测试也能正常
输出字符集,但是就是乱码


  • 同学你好,同学现在的web.xml中是否按照如上举例来修改,如果是,字符过滤器默认没有过滤所有的servlet请求,同学可以修改<url-pattern>中的内容,有如下两种方法尝试:1、将<url-pattern>改为<url-pattern>/</url-pattern>。2、在<url-pattern>中添加对添加新分类的servlet的过滤。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-12-10 19:31:48
  • 提问者 jia_蛙 回复 好帮手慕小班 #2
    老师 已经回复 麻烦看一下
    2019-12-10 20:11:03
提问者 jia_蛙 2019-12-10 16:09:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>s_book_system</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
   
  <!-- 配置初始化用户账户参数 -->
  <context-param>
    <param-name>account</param-name>
    <param-value>admin</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>huangzhou</param-value>
  </context-param>
   
  <!-- 对kaptcha第三方验证码生成包进行配置 -->
  <servlet>
    <servlet-name>KaptchaServlet</servlet-name>
    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
     
    <!--去掉干扰线 -->
    <init-param>
      <param-name>kaptcha.noise.impl</param-name>
      <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
    </init-param>
     
    <!--更换干扰样式 这里可以使用阴影效果 ShadowGimpy -->
    <init-param>
      <param-name>kaptcha.obscurificator.impl</param-name>
      <param-value>com.google.code.kaptcha.impl.ShadowGimpy</param-value>
    </init-param>
  </servlet>
   
  <servlet-mapping>
    <servlet-name>KaptchaServlet</servlet-name>
    <url-pattern>/KaptchaServlet</url-pattern>
  </servlet-mapping>
   
  <!--登录过滤器 -->
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.zhou.web.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/page/*</url-pattern>
  </filter-mapping>
   
  <!-- 字符集的过滤器 -->
  <filter>
    <filter-name>CharacterFilter</filter-name>
    <filter-class>com.zhou.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.zhou.web.filter;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * CharacterEncodingFilter 字符集过滤器
 * @author 25677
 *
 */
public class CharacterEncodingFilter implements Filter {
    //定义一个类中私有变量用来保存我们从xml中获取的过滤器的值
    private String encoding = "";
         
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //过滤请求字符集
        //因为我们的操作涉及的是Http操作 所以这里要进行强转操作
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
         
        //对拦截到的所有请求进行字符集设置
        req.setCharacterEncoding(encoding);
        //对拦截到的所有响应进行字符集设置
        res.setContentType("text/html;charset=" + encoding);
         
        //最后将请求和 响应继续向后传递
        chain.doFilter(req, res);
         
    }
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //通过filterConfig对象中的getInitParameter方法得到我们在xml中的初始化参数
        encoding = filterConfig.getInitParameter("encoding");
     
    }
 
}

http://img1.sycdn.imooc.com//climg/5def51fa09f4788a14560504.jpghttp://img1.sycdn.imooc.com//climg/5def5235098561b818690544.jpg

1
2
3
老师 我找到了css样式失效的关键步骤了,就是web.xml中的字符集配置,我发现我设置字符集配置
之后css样式就会失效,如果屏蔽它,css样式就能够正常的显示图1图2就是分别设置和频闭的样图,
web.xml的代码我贴在上面了,字符过滤器代码也贴在上面了,麻烦老师帮我分析一下


  • 提问者 jia_蛙 #1
    我知道了,我这里设置的字符集过滤器的拦截路径为<url-pattern>/*</url-pattern> /*好像把css样式也拦截了,为什么会拦截到css啊? 是因为页面引入css也算是一个请求嘛还是怎么样?jsp引入css有请求和响应嘛?还有,这里是对请求和响应进行设置字符集,如果要绕开css我应该怎样编写这个<url-pattern>拦截路径呀?
    2019-12-10 17:28:13
提问者 jia_蛙 2019-12-10 12:42:41
  • 同学你好,1、同学重新导入css文件再试试。另外,可以按F12,然后查看对应css样式有没有,浏览器console控制台有没有报错。2、如果只是样式问题,建议同学写为作业提交,然后写出说明文档,将问题说明一下,作业老师会根据同学的作业整体来调整一下。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-12-10 14:26:50
  • 提问者 jia_蛙 回复 好帮手慕小班 #2
    老师 我找到消失的步骤 麻烦老师看一下上面的回复 谢谢老师
    2019-12-10 16:10:27
好帮手慕小班 2019-12-10 11:53:36

同学你好,1、老师复制同学login.jsp代码是课程正常展示css效果的,同学可以在浏览器中在F12模式下将鼠标放在css样式的链接上,查看对应的具体地址是否正确。

http://img1.sycdn.imooc.com//climg/5def15de090409f308030208.jpg

    2、修改了一下web.xml文件,是否重启了tomcat呐,重启后还是不能正常展示css的样式吗

如果重启还是不能解决,同学直接新建一个项目将现有内容复制过去,因为这可能是eclipse的问题。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 jia_蛙 #1
    老师 我截图了 麻烦您看一下 修改完web.xml文件之后,重启了,已经弄了很久了
    2019-12-10 12:43:39
提问者 jia_蛙 2019-12-10 10:26:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/login.css">
        <script type="text/javascript">
            function data_Judge(){
                // 获得用户名的值
                var username = document.getElementById("name").value;
                if(username == null || username==""){
                    alert("用户名不能为空");
                    return false;
                }
                // 获得密码的值
                var password = document.getElementById("pwd").value;
                if(password == null || password==""){
                    alert("密码不能为空");
                    return false;
                }
                //获得验证码的值
                var code = document.getElementById("code").value;
                var length = code.length;
                if(length != "5"){
                    alert("验证码格式有误");
                    return false;
                }
                 
            }
           
          //点击更换图片函数
          function changeImg(){
           var codeImg = document.getElementById("codeImg");
           /* 使用第三方直接获取验证码 */
           codeImg.src="${pageContext.request.contextPath}/KaptchaServlet?time=" + new Date().getTime();
       }
        </script>
</head>
<body>
    <div class="login">
        <div class="header">
            <h1>
                <a href="/login.do">登录</a>
                <!-- 如果登入失败 msg就会被赋值并提示错误信息 -->
                <p style="color:red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${ msg }</p>
            </h1>
            <button></button>
        </div>
        <form action="${pageContext.request.contextPath}/LonginServlet" method="post" onsubmit="return data_Judge()">
            <div class="name">
                <input type="text" id="name" name="username">
                <p></p>
            </div>
            <div class="pwd">
                <input type="password" id="pwd" name="password">
                <p></p>
            </div>
            <div class="code">
                <input type="text" id="code" name="verifyCode" style="width: 150px">
                &nbsp;&nbsp;&nbsp;&nbsp; <img id="codeImg" onclick="changeImg()" src="${pageContext.request.contextPath}/KaptchaServlet" style="width: 150px; height: 42px; vertical-align: middle;">
                <p></p>
            </div>
            <div class="btn-red">
                <input type="submit" value="登录" id="login-btn">
            </div>
        </form>
    </div>
</body>
</html>
-------------
老师这上面就是我的全部代码  怕字符超出所以页面直复制了登录的login.jsp  css我都是直接复制
过来的没有该过,我昨天下午发现过滤器和监视器写在同一个包下,然后就创建了一个过滤器,把
这些类分开来,然后修改了一下web.xml文件,后面晚上,我登入的时候,清理了一下浏览器缓存,
就发现没有样式了,不知道是什么原因,找了很久

http://img1.sycdn.imooc.com//climg/5deeff8709e25c1b08260525.jpghttp://img1.sycdn.imooc.com//climg/5deeff6a09226ca000000000.jpg

提问者 jia_蛙 2019-12-10 10:24:01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
DeleteCategoryServlet.java
package com.zhou.web.servlet;
 
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.zhou.web.domain.Category;
import com.zhou.web.service.UserService;
import com.zhou.web.service.impl.UserServiceImpl;
 
/**
 * DeleteCategoryServlet 删除图书分类的控制
 */
@WebServlet("/DeleteCategoryServlet")
public class DeleteCategoryServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收数据
        String categoryId = request.getParameter("categoryId");
         
        //处理数据
        UserService userService = new UserServiceImpl();
        //获取图书分类列表
        List<Category> categoryList = (List<Category>) request.getServletContext().getAttribute("categoryList");
        //删除图书
        userService.DeleteCategory(categoryList,categoryId);
         
        //显示结果
        //重定向到图书分类管理页面
        response.sendRedirect(request.getContextPath() + "/page/categoryList.jsp");
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
--------------------
LonginServlet.java
package com.zhou.web.servlet;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhou.web.domain.User;
import com.zhou.web.service.UserService;
import com.zhou.web.service.impl.UserServiceImpl;
/**
 * LonginServlet 登入注册的判断的控制器
 */
@WebServlet("/LonginServlet")
public class LonginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收验证码并进行校验
        String verifyCode = request.getParameter("verifyCode");
        //先获取session中保存的验证码的信息
        String code =(String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
         
        //equalsIgnoreCase 忽略大小写比较
        if(verifyCode==null || !verifyCode.equalsIgnoreCase(code)) {
            request.setAttribute("msg""验证码输入不正确!");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
            //response.sendRedirect(request.getContextPath()+"/login.jsp");
            return;//结束下面的代码
        }
         
        //接收用户名与密码并判断
        String username =  request.getParameter("username");
        String password = request.getParameter("password"); 
        //封装数据
        User user = new User(username,password);       
        //处理数据
        UserService userService = new UserServiceImpl();
        //.获取全局域ServletContext中用户集合 并调用业务逻辑处理接口中的方法进行判断
        List<User> listUser =(List<User>) request.getServletContext().getAttribute("userList");
        User existUser =  userService.login(listUser, user);
         
        if(existUser == null) {
            request.setAttribute("msg""用户名或密码错误!");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }else {
            //登录成功 再session设置一个标志表明用户已经登录
            request.getSession().setAttribute("loginName", existUser);
            //重定向到首页
            response.sendRedirect(request.getContextPath()+"/page/categoryList.jsp");
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
 
 
----------------------
web.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>book_system</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
 
    <!-- 配置管理员账户和密码  -->
     <context-param>
       <param-name>account</param-name>
       <param-value>admin</param-value>
     </context-param>
     <context-param>
       <param-name>password</param-name>
       <param-value>huangzhou</param-value>
     </context-param>
        
     
    <!--配置验证码 -->
    <servlet>
        <servlet-name>KaptchaServlet</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
 
        <!--去掉干扰线 -->
        <init-param>
            <param-name>kaptcha.noise.impl</param-name>
            <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
        </init-param>
 
        <!--更换干扰样式 这里可以使用阴影效果 ShadowGimpy -->
        <init-param>
            <param-name>kaptcha.obscurificator.impl</param-name>
            <param-value>com.google.code.kaptcha.impl.ShadowGimpy</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>KaptchaServlet</servlet-name>
        <url-pattern>/KaptchaServlet</url-pattern>
    </servlet-mapping>
       
    <!-- 登录过滤器配置 -->
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.zhou.web.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/page/*</url-pattern>
    </filter-mapping
       
       
    <!-- 字符集过滤器 -->
    <filter>
        <filter-name>CharacterFilter</filter-name>
        <filter-class>com.zhou.web.filter.CharacterEncodingFilter</filter-class>
        <!-- 过滤参数化设置 -->
          <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
          <filter-name>CharacterFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
</web-app>
1
<br>



提问者 jia_蛙 2019-12-10 10:22:42


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
CharacterEncodingFilter.java
 
package com.zhou.web.filter;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * CharacterEncodingFilter 字符集过滤器
 * @author 25677
 *
 */
public class CharacterEncodingFilter implements Filter {
    //定义一个类中私有变量用来保存我们从xml中获取的过滤器的值
    private String encoding = "";  
    @Override
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //过滤请求字符集
        //因为我们的操作涉及的是Http操作 所以这里要进行强转操作
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
         
        //对拦截到的所有请求进行字符集设置
        req.setCharacterEncoding(encoding);
        //对拦截到的所有响应进行字符集设置
        res.setContentType("text/html;charset=" + encoding);
         
        //最后将请求和 响应继续向后传递
        chain.doFilter(req, res);     
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //通过filterConfig对象中的getInitParameter方法得到我们在xml中的初始化参数
        encoding = filterConfig.getInitParameter("encoding");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
LoginFilter.java
 
package com.zhou.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhou.web.domain.User;
/**
 * LoginListener 登录过滤器
 * @author 25677
 *
 */
public class LoginFilter implements Filter {
    @Override
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
            throws IOException, ServletException {
        //首先将ServletRequest、ServletResponse进行强转
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;
         
        //判断session域中的有没有存在用户名,没有则需要重新登录 有则表示登入
        User user  = (User) request.getSession().getAttribute("loginName");
                                                                     
        if(user == null) {
            response.sendRedirect(request.getContextPath() + "/login.jsp");
        }else {
            arg2.doFilter(request, response);
        }      
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
InitServletContextListener.java
 
package com.zhou.web.listener;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import com.zhou.web.domain.Category;
import com.zhou.web.domain.User;
/**
 * InitServletContextListener 启动程序时,初始化数据
 * @author 25677
 *
 */
//使用注解的方式对监听器进行配置
@WebListener
public class InitServletContextListener implements ServletContextListener {
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }
    @Override
    public void contextInitialized(ServletContextEvent event) {
        //1.初始化账户列表参数
        //创建一个list集合用来保存用户
        List<User> userList = new ArrayList<User>();   
        /*
         * 假设管理员账号比较隐私 不允许别人创建等操作 我们现在web.xml中配置好管理员账号
         * 然后再程序初始化的时候获取到保存到list集合中,根据用户登录时输入的数据进行比较
         */
        String account  =  event.getServletContext().getInitParameter("account");
        String password  =  event.getServletContext().getInitParameter("password");
         
        //创建User对象 并将获得的管理员输入填入其中
        User user = new User(account,password);
         
        //将user对象填入userlist中
        userList.add(user);
         
        //将userList存入ServletContext全局对象中
        event.getServletContext().setAttribute("userList", userList);
             
        //2.初始化图书分类列表参数
        //创建默认分类数据
        Category category = new Category("ca0001","计算机类");
        //创建集合
        List<Category> categoryList = new ArrayList<Category>();
        //往集合中添加数据分类
        categoryList.add(category);
        //将集合对象categoryList存入ServletContext全局对象中
        event.getServletContext().setAttribute("categoryList", categoryList);     
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
UserService.java
package com.zhou.web.service;
 
import java.util.List;
import com.zhou.web.domain.Category;
import com.zhou.web.domain.User;
/**
 * UserService 处理业务逻辑的接口类
 * @author 25677
 *
 */
public interface UserService {
     
    //处理登录的业务逻辑接口
    public User login(List<User> listUser, User user);
 
    //处理添加分类逻辑的业务接口
    public boolean JudgeCategory(List<Category> categoryList, Category category);
 
    //处理删除分类逻辑的业务接口
    public void DeleteCategory(List<Category> categoryList, String categoryId);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
UserServiceImpl.java
 
package com.zhou.web.service.impl;
import java.util.Iterator;
import java.util.List;
import com.zhou.web.domain.Category;
import com.zhou.web.domain.User;
import com.zhou.web.service.UserService;
 
/**
 * UserServiceImpl 处理业务逻辑接口的实现类
 * @author 25677
 *
 */
public class UserServiceImpl implements UserService {
     
    /**
     * 登入业务逻辑
     */
    @Override
    public User login(List<User> listUser, User user) {
        for(User users: listUser) {
            if(users.getUser().equals(user.getUser()) && users.getPassword().equals(user.getPassword())) {
                return users;
            }
        }
        return null;
    }
     
    /**
     * 处理添加分类的业务逻辑  
     true 表示添加成功 
     */
    @Override
    public boolean JudgeCategory(List<Category> categoryList, Category category) {
         
        //如果分类名或者分类id存在一样相同我们都认为添加失败
        for(Category c: categoryList) {
            if(c.getId().equals(category.getId()) || c.getCategoryName().equals(category.getCategoryName())) {
                return false;
            }
        }
        //不存在相同的 则将新的分类添加到集合
        categoryList.add(category);
         
        return true;
    }
     
    /**
     * 处理删除图书分类的业务逻辑
     */
    @Override
    public void DeleteCategory(List<Category> categoryList, String categoryId) {
        /*
         for(Category category: categoryList) {
         if(category.getId().equals(categoryId)) { categoryList.remove(category); } }
         */
        Iterator<Category> iterator = categoryList.iterator();
        while(iterator.hasNext()) {
            Category c = iterator.next();
            if(c.getId().equals(categoryId)) {
                iterator.remove();
                return;
            }
        }
    }
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
AddCategoryServlet.java
package com.zhou.web.servlet;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.zhou.web.domain.Category;
import com.zhou.web.service.UserService;
import com.zhou.web.service.impl.UserServiceImpl;
 
/**
 * AddCategoryServlet 添加分类的控制器
 */
@WebServlet("/AddCategoryServlet")
public class AddCategoryServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收数据
        String categoryId = request.getParameter("categoryId");//图书分类ID
        String categoryName = request.getParameter("categoryName");//分类名称
         
        //封装数据 
        Category category = new Category(categoryId,categoryName);
         
        //处理结果
        UserService userService = new UserServiceImpl();
        //获取当前图书分类集合categoryList
        List<Category> categoryList =(List<Category>) request.getServletContext().getAttribute("categoryList");
        //调用方法判断是否已经有相同的分类或者分类名称
        boolean flagAdd = userService.JudgeCategory(categoryList,category);
         
        //显示数据
        if(flagAdd) {
            //添加成功 重定向到图书分类管理页面
            response.sendRedirect(request.getContextPath() + "/page/categoryList.jsp");
        }else {
            //添加失败
            //设置失败标识
            request.setAttribute("flag""0");
            System.out.println("失败 重复");
            request.getRequestDispatcher("/page/addCategory.jsp").forward(request, response);
            //response.sendRedirect(request.getContextPath() + "/page/addCategory.jsp");
        }
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
 
}


提问者 jia_蛙 2019-12-09 23:12:37

http://img1.sycdn.imooc.com//climg/5dee64310994cd1f18960708.jpg

1
我又随便创建了一个web工程,然后将jsp和css引入有效果,但是在之前工程却没效果


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码