2025.3.24

今日学习内容:

  1. Filter过滤器
    实现用户登录验证Filter:
    public class LoginFilter implements Filter
    {
    public void doFilter(ServletRequest req, ServletResponse res,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpSession session = request.getSession();

          // 检查用户是否已登录
          if (session.getAttribute("user") == null) {
              request.getRequestDispatcher("/login.jsp").forward(req, res);
          } else {
              chain.doFilter(req, res); // 放行请求
          }
      }
    

}
在web.xml中配置Filter:

LoginFilter
com.example.filter.LoginFilter


LoginFilter
/admin/*

2. Listener监听器
监听ServletContext、HttpSession和ServletRequest的创建与销毁
实现Session计数器:
public class SessionCounter implements HttpSessionListener
{
private static int activeSessions = 0;

     public void sessionCreated(HttpSessionEvent se) {
         activeSessions++;
         System.out.println("新会话创建,当前活跃会话数: " + activeSessions);
     }
     
     public void sessionDestroyed(HttpSessionEvent se) {
         activeSessions--;
         System.out.println("会话销毁,当前活跃会话数: " + activeSessions);
     }

}
收获:
学会使用Filter实现请求预处理和权限控制
掌握Listener监听Web应用事件,实现统计功能
理解了Filter链的执行顺序和原理
科技查询源程序代码:
package com.example.kejichaxun;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.List;

public class MainActivity extends AppCompatActivity {
private EditText searchEditText;
private Button searchButton;
private RecyclerView recyclerView;
private PolicyAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    searchEditText = findViewById(R.id.searchEditText);
    searchButton = findViewById(R.id.searchButton);
    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    searchButton.setOnClickListener(v -> {
        String keyword = searchEditText.getText().toString().trim();
        new Thread(() -> {
            PolicyDBHelper dbHelper = new PolicyDBHelper();
            List<Policy> policies = dbHelper.searchPolicies(keyword);
            runOnUiThread(() -> {
                adapter = new PolicyAdapter(policies, this);
                recyclerView.setAdapter(adapter);
            });
        }).start();
    });
}

}

package com.example.kejichaxun;

public class Policy {
private long id;
private String name;
private String text;

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

@Override
public String toString() {
    return "Policy{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", text='" + text + '\'' +
            '}';
}

}

package com.example.kejichaxun;

import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;

public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder> {
private List policies;
private Context context;

public PolicyAdapter(List<Policy> policies, Context context) {
    this.policies = policies;
    this.context = context;
    Log.d("PolicyAdapter", "接收到的政策数量: " + policies.size()); // 添加日志输出
}

@NonNull  // 导入正确的注解
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_policy, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {  // 导入正确的注解
    Policy policy = policies.get(position);
    holder.nameTextView.setText(policy.getName());

    holder.itemView.setOnClickListener(v -> {
        Intent intent = new Intent(context, PolicyDetailActivity.class);
        intent.putExtra("policy_text", policy.getText());
        context.startActivity(intent);
    });
}

@Override
public int getItemCount() {
    return policies.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    TextView nameTextView;

    public ViewHolder(@NonNull View itemView) {  // 导入正确的注解
        super(itemView);
        nameTextView = itemView.findViewById(R.id.nameTextView);
    }
}

}

package com.example.kejichaxun;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;

public class PolicyDetailActivity extends AppCompatActivity {
private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_policy_detail);

    webView = findViewById(R.id.webView);
    String policyText = getIntent().getStringExtra("policy_text");
    webView.loadData(policyText, "text/html; charset=utf-8", null);
}

}

<EditText
    android:id="@+id/searchEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="搜索政策关键词"/>

<Button
    android:id="@+id/searchButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="搜索"/>

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<TextView
    android:id="@+id/nameTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:textStyle="bold"/>
posted @ 2025-03-24 22:30  被迫敲代码  阅读(3)  评论(0)    收藏  举报