六、Java Web模块
1. Tomcat几个常用参数的配置?
1.tomcat/conf/server.xml:修改端口号、解决URL中文参数乱码、修改Tomcat连接参数;
2. tomcat/bin/catalina.sh(windows系统下是catalina.bat):可用内存设置(JAVA_OPTS)、JDK路径配置(JAVA_HOME);
3. tomcat/conf/web.xml:设置session有效时间;加载项配置(下方);
参考:http://www.360doc.com/content/17/0221/16/2708086_630858986.shtml
2. 如何让 Servlet在服务器启动时就实例化?
在 conf/web.xml中有加载项配置 <load-on-startup>0</load-on-startup>
;默认值为 -1,负数时表示当此 Servlet被请求时(即有用户访问时)才会被加载;≥0时表示当此应用程序部署到 tomcat服务器(或其他服务器时)(即此应用被加载时)就会被加载,就会创建它的实例,调用其初始化方法(init());
初始化方法 init( ) 只调用一次,service()调用多次,destory()对于销毁两种情况:
① 此 web应用程序被重新加载;(重新创建 servelt实例,前面实例化的 servlet实例都会被销毁,调用其 destory( ))
② 此 web应用所在的服务器停止了。
创建一个 Servlet 的过程?
① 继承 HttpServlet;
② 重写 Servlet /doGet() /doPost();
③ web.xml中配置;
多用注解:eg:
@WebServlet("/admin")
public class AdminServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String op=req.getParameter("op");
String tel=req.getParameter("tel");
String password=req.getParameter("password");
Admin admin=new Admin();
admin.setTel(tel);
admin.setPassword(password);
if ("regist".equals(op)){
doRegist(req,resp,tel,admin);
}else {
doLogin(req,resp,admin);
}
}
}
Servlet 应用过滤器和监听器
@WebFilter("/*")
public class EncodingFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
chain.doFilter(req,resp);
}
public void destroy() {
}
}
@WebFilter("/*")
public class InitDataFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
List<Book> books= ServiceFactory.getService("book").findAll();
req.setAttribute("books",books);
chain.doFilter(req,resp);
}
}
public class TransactionFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
try {
TransactionManager.begin();
chain.doFilter(req,resp);
TransactionManager.commit();
} catch (IOException e) {
TransactionManager.rollback();
}
}
public void destroy() {
}
}
1. JSP和 Servlet的区别?
① jsp编译后就是 servlet,因此 jsp本质上就是 servlet;
② jsp常用作展示层,servlet常用作控制层;
③ jsp容易编写,servlet专业技术要求较高;
④ 最大不同在于:同下;
2.1. JavaScript中有哪些数据类型?
JavaScript数据类型:
①值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol;
②引用数据类型:对象(Object)、数组(Array)、函数(Function);
注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。
2. JSP的九大内置对象?
3. JSP的四种作用域?
3_1. JQuery对象与DOM对象如何转换?
DOM——>JQuery: $(DOM对象) JQuery对象的制造工厂;
JQuery——>DOM: 通过 [index]、get[index];
3_2. JSP的生命周期
① jsp生成 .java文件;
② 编译成 .class文件;
③ 加载 jsp.class类;
执行 class文件:
④ 实例化;
⑤ 初始化(jsp init);
⑥ 处理请求(jsp service);
⑦ 销毁(jsp destory)
3_3. JSP中动态包含与静态包含区别?
静态包含:<%@ include file="1.jsp"%>
;用 include指令,发生在 jsp —> java文件阶段即包含的动作是在 jsp被编译成 java文件时执行的,只有第一次请求时执行,只生成一个 .java文件,不能动态传递参数;(a先将 b包含进来再一起编译)
动态包含: <jsp:include page="1.jsp"...>
;用<jsp:include>
,发生在执行 class文件阶段动态加入即包含的动作是在 jsp对应的 servlet处理请求时执行的,每次请求都会执行,生成多个 java文件,可以使用标签传递参数,在被包含页面中获取;(动态包含是2个文件,jsp编译生成2个 .java文件,再动态包含进来即先分开编译再包含)
4. 转发 forward 和 重定向 redirect有什么区别?
① 地址栏: 转发 url地址不变,重定向 url地址会变;
② 浏览器发送了几次请求: 转发:1次,重定向:2次;
③ 是否可进行 request数据共享:
转发:两个资源间是同一个 request对象,可共享 request中的数据;
重定向:两个资源间不是同一个 request对象,不可以共享;
④ 转发不支持跨域(当前工程内部跳转),重定向可支持跨域。
什么是跨域?:https://blog.csdn.net/qq_41029923/article/details/120458737
5. GET请求 和 POST请求的区别?
① 携带请求参数的方式:
Get:通过请求头携带参数,参数会显示在 url地址栏;
Post:通过请求体携带参数,参数不会显示在地址栏,更安全;
② 服务器端处理请求的方法:
Get:会调用 Servlet的 doGet()来处理请求;
Post:会调用 Servlet的 doPost()来处理请求;
③ 数据的大小与限制:
Get传递参数大小有限制(<2k);
Post传递参数大小没有限制;
------------------------------------------------------------------------------------------
6. session的工作原理?
7. session和 cookie的区别?
8. 如果客户端禁止 cookie能实现 session还能用吗?
session和 cookie的区别?
------------------------------------------------------------------------------------------
9. springMVC和 struts的区别?
10. 如何避免 SQL注入?
什么是SQL注入:
SQL 注入其实就是恶意用户通过在表单中填写包含 SQL 关键字的数据来使数据库执行非常规代码的过程。简单来说,就是数据越俎代庖做了代码才能干的事情。这个问题的来源是,SQL 数据库的操作是通过 SQL 语句来执行的,而无论是执行代 码还是数据项都必须写在 SQL 语句之中,这就导致如果我们在数据项中加入了某些 SQL 语句关键字(比如说 SELECT、DROP 等等),这些关键字就很可能在数据库写入或读取数据时得到执行。
参考:https://blog.csdn.net/xuaner8786/article/details/79670900
11. 什么是 XSS攻击?如何避免?
12. 什么是 CSRF攻击?如何避免?
CSRF代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。