【简答题】JavaWeb必问8道简答题

1、说一说Servlet生命周期

servlet的生命周期是初始化(init)、服务(service)、销毁(destroy)

1.初始化(init):当第一次访问Servlet时调用init方法进行初始化,只初始化一次

2.服务(service):方法被调用时调用service方法进行服务,在项目启动期间可以进行多次服务

3.销毁(destory):当服务器关闭时调用destory方法进行销毁。只销毁一次

2、什么是jsp?jsp和Servlet有什么区别?

Servlet是服务器端的程序

JSP是服务器页面程序

JSP本质上就是一个Servlet,在访问jsp时,在服务器端会将jsp先转换成servlet,再将生产的servlet的结果响应给浏览器。

jsp相当于html页面中内嵌Java代码,侧重页面显示;Servlet是中书写Java代码,侧重逻辑控制;

3、Servlet接口中有哪些方法?

1.init(ServletConfig):初始化方法,第一次请求前执行,完成servlet初始化工作

2.service(ServletRequest,ServletResponse):执行方法,一次请求执行一次。

3.destroy():销毁方法,Servlet对象应该从服务中被移除的时候,容器会调用该方法进行销毁操作

4.getServletConfig():获得ServletConfig配置对象,包括初始化参数等。

5.getServletInfo():获得Servlet描述,一般没有用。

4、什么情况下调用doGet()和doPost()?

1、doGet():地址栏url方式访问、超链接访问、以及form表单中的method属性值为get方式访问,则调用doGet()方法

2、doPost():form表单中的method属性值为post方式访问,则调用doPost()方法

5、get请求和post请求有何区别

1. 表现形式:get在url中拼凑请求参数。Post请求参数在请求体中;

2. 安全性:get请求参数追加在路径上,可见不安全,post请求参数在请求体中,一般人不可见,较安全。

3. 数据大小:get提交数据有限,post无限。

6、forward和redirect的区别

1.地址栏是否改变:forward浏览器端网址不会发生变化,redirect浏览器端地址会变成;

2.是否可共享请求参数:forward是转发,属于同一个请求,request域中的数据可以传递;redirect是两次请求,request域中的数据不能传递;

3.是否可站外跳转:forward一般用于网站内部跳转,redirect可在站内跳转,也可跳转到其它网站。

7、JSP九大内置对象

1.request:请求对象

2.response:响应对象

3.session:回话对象

4.pageContext:页面上下文对象

5.application:类型是ServletContext,表示servlet上下文对象,可以在整个web项目中共享资源。

6.out  输出对象

7.page JSP网页本身

8.config Servlet的配置对象

9.exception 异常对象

8、讲解JSP中的四种作用域。

application:在当前web项目中有效

session:在当前会话中有效

request:在当前请求中有效

page:在当前页面有效

restcontroller和controller区别

1. Controller, RestController的共同点

都是用来表示Spring某个类的是否可以接收HTTP请求

2.  Controller, RestController的不同bai点

@Controller标识一个Spring类是Spring MVC controller处理器

@RestController:  a convenience annotation that does nothing more than adding the@Controller and@ResponseBody annotations。  @RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。

3、如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

例如:本来应该到success.jsp页面的,则其显示success.

4、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

5、如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

Android Studio 模拟器的选择和安装

一、Android Studio 自带的AVD模拟器

你是否遇到如下错误提示:

 

Android Studio 程序可以在真机上调试运行,Android Studio 也提供了模拟器来调试运行,这时需要配置 AVD 来选择你调试程序的模拟环境。
 1. 在 Intel CPU 的主机上启用 HAXM
在 Intel CPU 的主机上,为了加速AVD模拟器的运行速度,需要启用 HAXM 。如果在没有启用 HAXM 时就运行程序,调用AVD模拟器时会报如下错误:

emulator: ERROR: x86 emulation currently requires hardware acceleration!
Please ensure Intel HAXM is properly installed and usable.
CPU acceleration status: HAX kernel module is not installed!

出现此警告的原因是AVD模拟器调用X86架构的安卓虚拟机需要使用到Intel HAXM 引擎,而本机尚未进行安装导致。
此时,应该先进入 BIOS 启用 Virtualization Technology 选项。然后从 https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager/ 下载,也可以直接在 Android Studio 的 SDK 中下载,再安装即可。

2. 对于非 Intel CPU 的主机
对于非 Intel CPU 的主机或不能安装 HAXM 的主机(像我的云主机),则只能选择 arm 模拟器 或 选择其它第三方的模拟器 (像Genymotion)。
arm 模拟器的设置如下,不过一般情况下, arm 模拟器速度很慢 (像我的云主机启动它需要个吧小时),所以,应该尽量选用Genymotion等虚拟机。

3. 设置
如果以上配置无误,就可以运行程序试试。如果出现类似如下面的警告:
emulator: WARNING: Requested RAM size of 1536MB is too large for your environment, and is reduced to 1152MB.
emulator: device fd:596
HAXM is not working and emulator runs in emulation mode
emulator: The memory needed by this AVD exceeds the max specified in your HAXM configuration.
emulator: AVD RAM size = 1152 MB
emulator: HAXM max RAM size = 1024 MB
emulator: You might want to adjust your AVD RAM size and/or HAXM configuration to run in fast virt mode.
Cannot set up guest memory ‘pc.ram’: Invalid argument
警告提示模拟器RAM过大,需要在 AVD 中将模拟器的RAM改为512~1024,这样模拟器才能正常启动。

 

 

 

 

 

https://blog.csdn.net/qq_33505204/article/details/78452286?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

安卓 java 开发 解决方法: java.lang.RuntimeException: Can’t create handler inside thread that has not call

java.lang.RuntimeException: Can’t create handler inside thread that has not called Looper.prepare()

这时今天遇到的第二个错误。

注意:一定要在程序开头导入包:

import android.os.Looper;

 

原因是非主线程中没有创建Looper对象,需要先调用Looper.prepare()启用Looper。

解决办法是在线程的开始跟结束间调用Looper.prepare(); 跟Looper.loop();

如:

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

cachedThreadPool.execute(new Runnable() {

@Override

public void run() {

Looper.prepare(); 

***********

Looper.loop();

}

});

注意:一个线程只能有一个Looper

Android Studio 开发,找不到android.support.v7.app 问题

Android Studio 开发,找不到android.support.v7.app 问题

程序中有:

import android.support.v7.app.AppCompatActivity;

但是v7呈现红色报错,鼠标移到v7处,显示cannot resolve symbol ‘v7’
在下方 Build 栏中有提示

找不到软件包android.support.v7.app

解决办法:
File -> Project Structure
点击后出现 Project Structure 窗口。

然后选择左边竖栏的 app,
选择app后,在右边选择 Dependencies 页面
点击最右边的“+”号,选择第一项 Library dependency

具体该选择添加哪些?,= =,无奈的选择把所有包含‘v7’的项目全部添加了。

添加完成后,程序可以通过编译。

安卓Android java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

首先得知道Android的四大组件:活动(Activity)服务(Service)广播接收器(BroadcastReceiver)和内容提示器(Content Provider),其中活动是所有Android应用程序的门面,凡是在应用中看到的东西,都是放在活动中的。

查看报错信息如下:

起因:

想设置一个对话框式的活动,在AndroidMainfest.xml的<activity>标签的配置如下:

<activity android:name=”.DialogActivity”

android:theme=”@android:style/Theme.Dialog”/>

原因:

从错误提示中提到Theme.AppCompat theme,因为我们的activity一定是继承了兼容包中的类,

AndroidStudio帮我们创建的activity继承了ActionBarActivity,它来自android.support.v7.app.ActionBarActivity。

所以就要使用与其配合的AppCompat的theme才行。

解决方法有两种:

1: 将DialogActivity 改为直接继承Activity

2: 根据提示来使用AppCompat的theme

<activity android:name=”.DialogActivity”

android:theme=”@style/Theme.AppCompat.Dialog” />

重新运行,出现了理想的对话框式的活动。

问题不大,仅仅是一个小小的问题,但是重要的是分析问题和解决问题的过程,小问题解决了,以后遇到的大问题就可以分解成小问题,然后逐个解决。

 

能用Android Studio来学习JAVA吗

能用Android Studio来学习JAVA吗

可以,不过在创建了Android工程后,需要在里面创建一个Module,然后创建JAVA类,运行的话自己加一个main方法就可以了。

其他:

想学习java做android开发,直接用android studio可以么?

OS X 系统,翻墙intellij idea还是没配置好,但Android studio可以用了,可以直接用这个软件学java语言么,有c语言基础