java web中关于404问题的根本来源与解决

404问题对于刚刚接触web开发的新手朋友来说,算得上是头痛的问题。其实这个问题很简单。根本原因就是服务器找不到目标页面(或者说成找不到目web资源)而产生的。既然找不到资源,那么很大原因就是访问路径或者XML的配置的出了问题。解决办法我们就从这里入手。

第一个方法:检查表单的action属性中路径是否正确,是否有因为粗心而打错的字。

第二个方法:a标签中路径是否正确。

需要注意的是表单或a标签中的路径有时候应该加上你的basePath。

第三个方法:.XML是否配置正确

当然,既然有了错误,控制台一般也会报错。我们也要结合控制台给我们提供的报错信息进行针对性Debug.
比如:控制台有
ContainerBase.addChild: start:

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Reg_log]]

Error deploying configuration descriptor E:\java.metadata.plugins\org.eclipse.wst.server.core\tmp0\conf\Catalina\localhost\Reg_log.xml

java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Reg_log]]

很可能就是你已经选择了servlet的在XML中自动配置。而你又在XML配置了一遍,于是就会报错。

我们在编写Servlet的时候是选择创建Servlet文件如图:

所以创建后Servlet文件中会产生着样的一串代码:@WebServlet("/InitServlet")具体如下图:

这说明在XML文件中就不用再配置对应的Servlet文件了。可我们在XML中还是写了,所以就产生了上面控制台中的报错。更改之前的XML文件如图:
在这里插入图片描述

当我们把和两个标签删除之后就,程序就可以正常运行了

总之,发生404错误就两大点要注意的。第一,是项目中关于页面跳转的所有路径要检查正确与否。第二,是.XML文件是否配置正确。

(笔者能力有限,如有错误和缺点希望得到指点)

如果你要实现一直监听遥控器按键事件,可以使用 Android 系统自带的 AccessibilityService 来实现。AccessibilityService 是 Android 系统提供的一个辅助服务,可以监控用户的操作,并在用户操作时进行响应,从而实现一些特定的功能,比如辅助功能、自动化测试等。 具体实现步骤如下: 1. 创建一个继承自 AccessibilityService 的服务类,并实现其 onAccessibilityEvent() 方法。在这个方法中,你可以获取到用户的按键事件,并根据不同的按键事件进行相应的操作。 ```java public class MyAccessibilityService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { int eventType = event.getEventType(); switch (eventType) { case AccessibilityEvent.TYPE_VIEW_CLICKED: // 当用户点击了某个控件时,执行相应的操作 break; case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED: // 当用户长按某个控件时,执行相应的操作 break; case AccessibilityEvent.TYPE_VIEW_SCROLLED: // 当用户滑动屏幕时,执行相应的操作 break; // 其他事件类型... } } @Override public void onInterrupt() { // 当服务被中断时的处理逻辑 } } ``` 2. 在 AndroidManifest.xml 文件中声明这个服务,并将它注册为 AccessibilityService。 ```xml <service android:name=".MyAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice_config" /> </service> ``` 在这个配置文件中,你需要指定服务的一些基本属性,比如服务名称、服务描述、服务标志等。 3. 在 accessibilityservice_config.xml 文件中配置服务的属性。 ```xml <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeViewClicked|typeViewLongClicked|typeViewScrolled" android:accessibilityFeedbackType="feedbackSpoken" android:accessibilityFlags="flagDefault" android:canRetrieveWindowContent="true" android:description="@string/accessibility_service_description" android:notificationTimeout="100" android:packageNames="com.example.app" android:settingsActivity="com.example.app.SettingsActivity" /> ``` 在这个配置文件中,你需要指定服务的一些属性,比如支持的事件类型、反馈类型、标志位、包名、超时时间等。 4. 在服务的 onServiceConnected() 方法中注册遥控器按键事件。 ```java @Override protected void onServiceConnected() { super.onServiceConnected(); AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED | AccessibilityEvent.TYPE_VIEW_LONG_CLICKED | AccessibilityEvent.TYPE_VIEW_SCROLLED; info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; info.flags = AccessibilityServiceInfo.DEFAULT; info.packageNames = new String[]{"com.example.app"}; setServiceInfo(info); } ``` 在这个方法中,你需要先调用父类的 onServiceConnected() 方法,然后创建一个 AccessibilityServiceInfo 对象,设置支持的事件类型、反馈类型、标志位、包名等属性,最后调用 setServiceInfo() 方法注册这个服务。 需要注意的是,为了保证安全性和稳定性,Android 系统对 AccessibilityService 的使用进行了一些限制,比如需要用户手动开启服务、需要获取一些敏感权限等。因此,在实现这个功能时,需要仔细阅读 Android 文档,并遵循系统的相关规定和限制。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值