简介
本片文章是对java web的一些粗浅学习的一些内容总结,虽然这个东西已经快被时代抛弃了,开发的安全性、简易性以及开发效率等方面都远远比不上现在的框架,但是学习过程中对我自己也是有所提高的,对于开发中的一些东西也有了一些新的理解,不过就不再本片文章中描述了。
MVC三层框架
MVC 三层架构是比较原始和简单的框架结构了,M指的是model,是指程序中的示例对象以及相关的方法,V是视图层,也就是展示给大家看的,C,Controller控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
在实际工作过程中程序的分层可能远远不止这几层。可能还会包括,持久层dao、service(服务层,负责具体的业务实现),filter过滤层等等。
Servlet
下面的代码是我学习的时候进行随便写的,写java web 这块的话记得创建类然后继承HttpServlet即可,其中还需要HttpServletRequest、HttpServletResponse两个类对参数数据进行接收以及返回相关结果,所以需要导入相关的类,建议使用IDEA,写的时候就自动导入了,还是比较好用的。
还有一点需要注意,那就是java web 涉及到的这些类并不在官方库中,需要导入jar包或者使用版本管理工具,类似maven等进行依赖的配置,才能够进行使用。
package Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
public class param extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String result = req.getParameter("value");
resp.setContentType("text/html");
// System.out.print(result);
PrintWriter out = resp.getWriter();
out.print("good");
}
}
HttpServlet 中有doGet、doPost等方法,就是用来接收不同请求类型的请求的。
HttpServletRequest
获取参数值的方法。
String getParameter(String name):通过指定名称获取参数值;
String[] getParameterValues(String name):通过指定名称获取参数值数组,有可能一个名字对应多个值,例如表单中的多个复选框使用相同的name时;
Enumeration getParameterNames():获取所有参数的名字;
Map getParameterMap():获取所有参数对应的Map,其中key为参数名,value为参数值。
getParameterValues
<form action="ParamServlet" method="post">
上网:<input type="checkbox" name="hobby" value="netplay" /><br/>
踢球:<input type="checkbox" name="hobby" value="football" /><br/>
看书:<input type="checkbox" name="hobby" value="read" /><br/>
编程:<input type="checkbox" name="hobby" value="programme" /><br/>
<input type="submit" value="提交"/><br/>
</form>
---------------------------------------------------------------------------------
// 获取所有名为hoby的参数值
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
getParameterMap(),request.getParameterMap()方法返回Map类型,对应所有参数。其中Map的key对应参数的名字;Map的value对应参数的值。
<form action="ParamServlet" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
性别:<input type="text" name="sex"/><br/>
<input type="submit" value="提交"/><br/>
</form>
--------------------------------------------------------------------------
Map<String,String[]> map = request.getParameterMap();
Set<String> keys = map.keySet();
for(String key : keys) {
String[] value = map.get(key);
System.out.println(key + " = " + value[0]);
}
------------------------------------------------------------------------------
sex = male
name = zhangSan
age = 23
转发
req.getRequestDispatcher("/hello.html").forward(req, resp);
重定向
response.sendRedirect(path);
访问配置
HttpFilter
Filter 顾名思义,就是过滤请求或者返回包的,可以对内容进行修改、拦截、部分设置等内容,可以对请求内容进行过滤、编码转换等工作,可以有效的统一处理一些信息,或者对恶意攻击数据进行处理,大大提高程序的安全性。
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpFilter;
import java.io.IOException;
public class Filter2 extends HttpFilter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
res.setContentType("text/html;charset=UTF-8");
super.doFilter(req, res, chain); //注意这一行
}
}
过滤代码一定要写在super.doFilter()之前,不然会不生效
其实就是调用的父方法里面的这个,chain.doFilter(),意思是进入下一个过滤器,也就是在请求某个servlet之后,会经过一系列的Filter 进行过滤,这个我们成为过滤链,chain.doFilter()方法就是表示进入下一个过滤器,没有下一个过滤器的话则访问到servlet 了,过滤链的先后顺序由配置决定。
访问配置
无论是servlet 还是Filter,都需要配置之后才能进行访问,java web 中有两种配置方式
第一种,是在web.xml中,进行配置。
servlet 配置示例
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>Servlet.servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
Filter 配置示例
<filter>
<filter-name>byte</filter-name>
<filter-class>Filter.Filter2</filter-class>
</filter>
<filter-mapping>
<filter-name>byte</filter-name>
<url-pattern>/hello</url-pattern>
</filter-mapping>
IDEA 配置
首先是关于新项目的配置,我是用的是2021.2版本的,关于新项目的配置如下图所示,在这里配置之后,每次创建新项目时才会直接生效,不然回到是还是默认配置。
maven、gradle等都是版本管理工具,可以对依赖进行管理,同时可以提供某些模板等,是比较方便的工具。不建议使用IDEA 自带默认的,建议自行配置,具体配置方法,请自行百度
可以在这里配置maven 的运行环境
这里可以配置项目的运行环境。
依赖配置
在使用版本管理工具类似maven 等工具时,可以直接在xml 文件中进行配置,只要遵循某些语法即可,maven可以使用这个网站辅助
https://mvnrepository.com/
不适用版本工具导入jar 包的话,可以将jar 包放入到 lib目录中,同样可以达到效果。