2025.3.24
今日学习内容:
-
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/*
-
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
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
private Context context;
public PolicyAdapter(List
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);
}
}

浙公网安备 33010602011771号